【问题标题】:Kafka Topic and Partition allocation for consumer消费者的Kafka主题和分区分配
【发布时间】:2022-06-14 19:03:33
【问题描述】:

刚开始做kafka,需要用sarama go pkg开发一个consumer客户端,client应该是consumer group的一部分,需要读取A和B两个topic,client需要读取从任何平衡策略分配给它的主题 A 的某些分区中读取,而对于 B,它需要从所有分区中读取(B 有点像广播主题)。

工作流程:

  • 消费群xx。
  • 我有两个主题 A 和 B,每个主题有 6 个分区 [0,1,2...5]。
  • 我在xx有两个消费者C1和C2,数据应该这样读取:
    C1 从 A:[0,1,2] 和 B:[0,1,2,3,4,5,6] 读取
    C2 读取 A:[3,4,5] 和 B:[0,1,2,3,4,5,6]

注意:如果添加了新客户端,则 A 中的分区应重新平衡,并且应读取 B 中的所有分区。

我尝试实施我的自定义平衡策略但失败了,请告诉我这是否可以做到以及如何做到。

【问题讨论】:

    标签: go apache-kafka kafka-consumer-api kafka-topic sarama


    【解决方案1】:

    对于同一消费者组中的任何消费者,多个消费者不可能同时监听任何重叠的分区。换句话说,除非您将 C2 消费者移至其自己的唯一组,否则无法监听主题 B 的所有分区,而不管主题 A 的消费者组的再平衡策略如何。

    【讨论】:

      【解决方案2】:

      您需要在您的服务中同时实现 Partition Consumer 和 Group Consumer。

      1.团体消费者

      使用组消费者来消费来自主题“A”的消息。您可以在 Sarama 库中实现ConsumerGroup 接口。您的消费者“C1”和“C2”都需要以组的形式订阅主题“A”(使用相同的客户端 ID)。

      2。分区消费者

      使用分区消费者来消费主题“B”中的消息。为此,请在 Sarama 库中使用 Consumer 接口。 “C1”和“C2”需要在启动和重新平衡后订阅所有分区。

      【讨论】:

        猜你喜欢
        • 2017-10-17
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-05
        • 1970-01-01
        • 2014-10-25
        • 1970-01-01
        相关资源
        最近更新 更多