KAFKA 0.9新增消费者群加入和心跳多线程问题



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

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

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

消费者可以读取多个分区。因此,一般来说,单个消费者就足够了——它可以将所有分区分配给自己。然而,如果你"希望每个分区都有自己的消费者",你当然需要每个分区一个消费者…

关于加入组:如果你有多个消费者,你在一个再平衡,再平衡不会永远阻塞。应用了超时。如果使用者没有在超时时间内发送连接请求,它将退出组(暂时),然后再平衡可以完成。如果这个延迟的消费者再次激活并发送加入组请求,则将触发新的rebalance。

暂停,投票,简历将是正确的事情。注意:这将通过KIP-62得到改变,它在消费者中引入了一个心跳后台线程。

最新更新