我正在使用kafka消费者api 0.10.2.1。
KafkaConsumer提供分区分配和撤销的回调:
consumer.subscribe(topics, consumerRebalanceListener);
其中consumerRebalanceListener
有两个方法:
public void onPartitionsRevoked(Collection<TopicPartition> partitions);
public void onPartitionsAssigned(Collection<TopicPartition> partitions);
由于 Kafka Consumer 中的所有操作都发生在单线程中,并且在 poll() 方法内部,因此这些回调是从 poll()
方法内部调用的。
问题是,它们是否可以通过一个 poll()
调用来调用,还是始终需要两个单独的 poll()
调用?
最佳答案
在我看来,它们是从 poll()
调用中调用的。当消费者实例开始加入群组时,首先调用onPartitionsRevoked
撤销分配给该实例的所有分区,并发送JoinGroup请求。然后它无限期地阻塞,直到收到响应。如果加入组成功,则会通过调用onPartitionsAssigned
执行用户的回调。所有这些都在一轮民意调查
中完成。
关于java - 卡夫卡消费者: can onPartitionsRevoked and onPartitionsAssigned callbacks be executed inside one poll() call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808621/