我尝试将我的KAFKA客户端从0.8.2更新到0.9.0.1,以减轻对zookeeper群集的压力。我遇到了以下问题:
KAFKA消费者协议表示"加入组请求将停在协调员处,直到所有预期成员都发送了他们自己的加入组请求"。然后我发现连接组请求是由poll()触发的,并且该方法在组重新平衡完成之前不会返回。那么这是否意味着我需要与消费者号码相同数量的消费者线程,以确保所有消费者可以同时发送群组加入请求?如果我有超过10000个分区,并且我希望每个分区都拥有它自己的消费者,这是否意味着我需要超过10000个消费者线程?
要触发心跳,我需要调用poll()。但是,如果我不想收到新消息,因为旧消息仍然消耗,我可以通过consumer.pause() - >来做到这一点。 consumer.poll() - > consumer.resume()?有没有更好的方法呢?
答案 0 :(得分:1)
消费者可以阅读多个分区。因此,一般来说,单个消费者就足够了 - 它可以将所有分区分配给自己。但是,如果您“想要每个分区都拥有自己的消费者”,那么每个分区当然需要一个消费者......
关于加入群组:如果您有多个使用者且您处于重新平衡状态,则重新平衡将不会永久阻止。应用了超时。如果消费者在超时内没有发送加入请求,它将从组中退出(暂时)并且可以完成重新平衡。如果这个已故的消费者再次发送连接组请求,则会触发新的重新平衡。
暂停,投票,恢复将是正确的做法。单挑:这将通过KIP-62进行更改,这会在消费者中引入心跳背景线程。