Kafka Consumer:可以在一个poll()调用中执行onPartitionsRevoked和onPartitionsAssigned回调吗?

时间:2017-10-18 10:59:21

标签: java apache-kafka kafka-consumer-api

我使用kafka consumer api 0.10.2.1。

KafkaConsumer为分区分配和撤销提供回调:

consumer.subscribe(topics, consumerRebalanceListener);

consumerRebalanceListener有两种方法:

public void onPartitionsRevoked(Collection<TopicPartition> partitions);
public void onPartitionsAssigned(Collection<TopicPartition> partitions);

由于Kafka使用者中的所有内容都发生在单线程和poll()方法内部,因此从poll()方法内部调用这些回调。 问题是,它们是否可以通过一次poll()来电拨打,还是始终需要两次poll()次来电?

1 个答案:

答案 0 :(得分:3)

在我看来,他们是从poll()电话打来的。当一个消费者实例开始加入该组时,首先调用onPartitionsRevoked来撤销分配给该实例的所有分区并发送JoinGroup请求。然后它无限期地阻塞,直到收到响应。如果它成功加入组,则通过调用onPartitionsAssigned来执行用户的回调。所有这些都在一轮poll中完成。