只是为了简化场景。
消费者数量==分区数量== Kafka经纪人数量
如果将消费者部署在经纪人所在的同一台机器上,如何让每个消费者只在本地消费消息?目的是减少所有网络开销。
我认为如果每个消费者都能知道他们机器上的partition_id,我们可以做到,但我不知道怎么做?还是有其他方向来解决这个问题?
感谢。
答案 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