簡體   English   中英

在卡夫卡,如何使消費者從本地分區消費?

[英]in Kafka, how to make consumers consume from local partition?

只是為了簡化場景。

使用者數量==分區數量==卡夫卡經紀人編號

如果將使用方部署在代理所在的同一台計算機上,那么如何使每個使用方僅在本地使用消息? 目的是減少所有網絡開銷。

我認為如果每個消費者都可以知道他們計算機上的partition_id,我們可以做到,但是我不知道怎么辦? 還是有其他解決此問題的方向?

謝謝。

bin/kafka-topics.sh --zookeeper [zk address] --describe --topic [topic_name]告訴您哪個代理托管每個分區的領導者。 然后,您可以為每個使用者使用手動分區分配,以確保它從本地分區使用。

可能不值得付出努力,因為分區領導層可能會發生變化,然后您必須重新平衡所有消費者以重新成為本地用戶。 您只需將復制因子從3減少到2,就可以節省相同數量的網絡帶寬,而花費的精力更少。

也許您可以使用Admin Client API。 首先,您可以使用describeTopics()方法獲取有關集群中主題的信息。 您可以從DescribeTopicResult訪問帶有有關每個主題分區信息的TopicPartitionInfo。 從那里,您可以通過Leader()訪問Node。 節點包含host(),您可以檢查它是否與使用者正在運行的主機或id()相同,並且使用者應該在同一台機器上運行有關Broker-id的信息(通常這是您可以預先定義)。 以下JavaDoc上有關Admin Client API的更多信息:

https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM