在Kafka,如何让消费者从本地分区消费?

时间:2017-07-17 23:16:51

标签: parallel-processing apache-kafka local distributed-system

只是为了简化场景。

消费者数量==分区数量== Kafka经纪人数量

如果将消费者部署在经纪人所在的同一台机器上,如何让每个消费者只在本地消费消息?目的是减少所有网络开销。

我认为如果每个消费者都能知道他们机器上的partition_id,我们可以做到,但我不知道怎么做?还是有其他方向来解决这个问题?

感谢。

3 个答案:

答案 0 :(得分:1)

bin/kafka-topics.sh --zookeeper [zk address] --describe --topic [topic_name]告诉您哪个代理托管每个分区的领导者。然后,您可以为每个使用者使用手动分区分配,以确保它从本地分区使用。

答案 1 :(得分:1)

可能不值得努力,因为分区领导可以改变,然后你必须重新平衡所有的消费者再次本地化。只需将复制因子从3减少到2,就可以节省相同数量的网络带宽。

答案 2 :(得分:0)

也许您可以使用Admin Client API。 首先,您可以使用describeTopics()方法获取有关群集中主题的信息。从DescribeTopicResult中,您可以访问TopicPartitionInfo,其中包含有关每个主题的分区的信息。从那里,您可以通过leader()访问Node。节点包含host(),您可以检查它是否与您的消费者正在运行的主机或id()相同,并且消费者应该具有在同一台机器上运行的broker-id的信息(通常它& #39; s您可以预先定义的信息。有关以下JavaDoc的Admin Client API的更多信息:

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