【问题标题】:KAFKA 0.9 new consumer group join and heart beat multi-thread problemsKAFKA 0.9 新增消费组加入和心跳多线程问题
【发布时间】:2017-01-12 17:46:15
【问题描述】:

我正在尝试将我的 KAFKA 客户端从 0.8.2 更新到 0.9.0.1,以减少对 zookeeper 集群的压力。我遇到了以下问题:

  1. KAFKA 消费者协议说“加入组请求将停在协调器上,直到所有预期的成员都发送了他们自己的加入组请求”。然后我发现加入组请求是由poll()触发的,并且在组再平衡完成之前该方法不会返回。那么这是否意味着我需要与消费者数量相同数量的消费者线程来确保所有消费者可以同时发出组加入请求?如果我有超过 10000 个分区并且我希望每个分区都有自己的消费者,这是否意味着我需要超过 10000 个消费者线程?

  2. 要触发心跳,我需要调用 poll()。但是如果我不想收到新消息,因为旧消息仍在消耗,我可以通过 consumer.pause() -> consumer.poll() -> consumer.resume() 来做到这一点吗?有没有更好的方法来做到这一点?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    消费者可以读取多个分区。所以一般来说,一个消费者就足够了——它可以将所有分区分配给自己。但是,如果您“希望每个分区都有自己的消费者”,那么每个分区当然需要一个消费者...

    关于加入群组:如果您有多个消费者并且您处于重新平衡中,重新平衡不会永远阻塞。应用了超时。如果消费者没有在超时时间内发送加入请求,它会退出组(暂时)并且重新平衡可以完成。如果这个迟到的消费者再次发送加入组请求,则会触发新的重新平衡。

    暂停、轮询、恢复将是正确的做法。注意:这将通过KIP-62 进行更改,在消费者中引入心跳后台线程。

    【讨论】:

    • 感谢 Matthias 的回答和提醒。
    • 我试图让每个分区成为消费者,因为我处于高吞吐量的环境中。据我了解,每个消费者对每次获取的消息大小都有其限制,因此让每个分区都有自己的消费者应该能够增加总吞吐量。如果我的理解有误,请告诉我...
    • 听起来很合理。每个分区都有一个消费者应该没有问题。只要您有足够的经纪人,系统就应该能够为负载提供服务。
    • 谢谢马蒂亚斯。
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    相关资源
    最近更新 更多