【问题标题】:in Kafka, how to make consumers consume from local partition?在 Kafka 中,如何让消费者从本地分区消费?
【发布时间】:2017-07-18 19:41:12
【问题描述】:

只是为了让场景简单。

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

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

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    可能不值得付出努力,因为分区领导可能会发生变化,然后您必须重新平衡所有消费者以再次成为本地消费者。只需将复制因子从 3 降低到 2,您就可以更轻松地节省相同数量的网络带宽。

    【讨论】:

    • 感谢提醒,但为什么复制因子会影响消费者端的网络带宽?
    • @HongjiChen 它不会影响消费者端,但它是生产者和消费者的同一个共享网络,你不能消费没有生产的东西。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2019-08-27
      • 2017-10-17
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多