Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 在卡夫卡中,如何让消费者从本地分区消费?_Parallel Processing_Apache Kafka_Local_Distributed System - Fatal编程技术网

Parallel processing 在卡夫卡中,如何让消费者从本地分区消费?

Parallel processing 在卡夫卡中,如何让消费者从本地分区消费?,parallel-processing,apache-kafka,local,distributed-system,Parallel Processing,Apache Kafka,Local,Distributed System,只是为了简化场景 消费者数量==分区数量==Kafka代理数量 如果将使用者部署在代理所在的同一台机器上,如何使每个使用者仅在本地使用消息?目的是减少所有的网络开销 我认为如果每个消费者都知道他们机器上的分区id,我们就可以做到,但我不知道如何做到?还是有其他的方向来解决这个问题 谢谢。bin/kafka-topics.sh--zookeeper[zk address]--description--topic[topic_name]告诉您哪个代理托管每个分区的负责人。然后,您可以为每个使用者使用

只是为了简化场景

消费者数量==分区数量==Kafka代理数量

如果将使用者部署在代理所在的同一台机器上,如何使每个使用者仅在本地使用消息?目的是减少所有的网络开销

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


谢谢。

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

也许您可以使用管理客户端API。 首先,您可以使用describeTopics()方法获取集群中主题的相关信息。从DescribeTopicResult,您可以访问TopicPartitionInfo,其中包含每个主题的分区信息。从那里,您可以通过引线()访问节点。节点包含主机(),您可以检查它是否与使用者正在运行的主机或id()相同,并且使用者应该具有关于在同一台计算机上运行的代理id的信息(通常,您可以预先定义该信息)。有关管理客户端API的更多信息,请访问以下JavaDoc:


可能不值得这么做,因为分区领导层可能会发生变化,然后您必须重新平衡所有消费者,使其再次成为本地消费者。您只需将复制因子从3减少到2,就可以节省同样数量的网络带宽。

是否可以在运行时获取本地分区id?最好不要硬编码。是的。看一看卡夫卡的元数据API:谢谢你的提醒,但为什么复制因素会影响消费者端的网络带宽?@HongjiChen它不会影响消费者端,但生产者和消费者都是同一个共享网络,你不能消费未生产的产品。