0

只是爲了讓場景簡單。在卡夫卡,如何讓消費者從本地分區消費?

消費者的數量== ==分區卡夫卡經紀人數

如果在經紀人是同一機中部署的消費者,如何讓每個消費者只消耗的消息在本地的號碼嗎?目的是減少所有的網絡開銷。

我想我們可以做到這一點,如果每個消費者可以知道他們的機器上的partition_id,但我不知道如何?還是有其他方向來解決這個問題?

謝謝。

回答

1

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

+0

是否可以在運行時獲取本地分區ID?最好不要硬編碼。 –

+0

是的。看看Kafka的元數據API:https://kafka.apache.org/protocol#The_Messages_Metadata – vahid

0

也許你可以使用管理客戶端API。 首先,您可以使用describeTopics()方法獲取有關羣集中主題的信息。通過DescribeTopicResult,您可以訪問TopicPartitionInfo,併爲每個主題提供有關分區的信息。從那裏你可以通過leader()訪問節點。 Node包含主機(),您可以檢查它是否與您的客戶正在運行的主機相同或是id(),並且客戶應該擁有有關在同一臺計算機上運行的broker-id的信息(通常這是一個您可以預先定義)。在下面的JavaDoc上管理客戶端API更多的Infor:

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

1

可能不值得,因爲分區領導能改變的,那麼你就必須重新調整所有的消費者又是本地的努力。只需將複製因子從3減少到2,即可節省相同數量的網絡帶寬。

+0

感謝提醒,但爲什麼複製因素可能會影響消費者端的網絡帶寬? –

+0

@HongjiChen它不影響消費者方,但它是生產者和消費者的共享網絡,你不能消費沒有生產的東西。 –