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

0lvr5msh  于 2021-06-08  发布在  Kafka
关注(0)|答案(3)|浏览(475)

只是为了让场景简单化。
消费者数量==分区数量==Kafka经纪人数量
如果将使用者部署在代理所在的同一台机器上,如何使每个使用者只在本地使用消息?其目的是减少所有的网络开销。
我想如果每个消费者都能知道他们机器上的分区id,我们就能做到,但我不知道怎么做?还是有其他的方向来解决这个问题?
谢谢。

xj3cbfub

xj3cbfub1#

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

nkoocmlb

nkoocmlb2#

可能不值得付出这样的努力,因为分区领导层可能会发生变化,然后您必须重新平衡所有的消费者,才能再次成为本地用户。只需将复制因子从3减少到2,就可以以较少的工作量节省相同的网络带宽。

zlwx9yxi

zlwx9yxi3#

也许你可以使用管理客户端api。首先,可以使用descripbetopics()方法获取集群中主题的信息。从describetopicresult可以访问主题分区信息,其中包含每个主题的分区信息。从那里可以通过leader()访问节点。节点包含host(),您可以检查它是否与使用者正在运行的主机或id()相同,并且使用者应该拥有关于在同一台计算机上运行的代理id的信息(通常,您可以预先定义该信息)。有关管理客户端api的更多信息,请访问以下javadoc:
https://kafka.apache.org/0110/javadoc/index.html?org/apache/kafka/clients/admin/adminclient.html

相关问题