KAFKA-10134: Use long poll if we do not have fetchable partitions (#8934)
The intention of using poll(0) is to not block on rebalance but still return some data; however, `updateAssignmentMetadataIfNeeded` have three different logic: 1) discover coordinator if necessary, 2) join-group if necessary, 3) refresh metadata and fetch position if necessary. We only want to make 2) to be non-blocking but not others, since e.g. when the coordinator is down, then heartbeat would expire and cause the consumer to fetch with timeout 0 as well, causing unnecessarily high CPU. Since splitting this function is a rather big change to make as a last minute blocker fix for 2.6, so I made a smaller change to make updateAssignmentMetadataIfNeeded has an optional boolean flag to indicate if 2) above should wait until either expired or complete, otherwise do not wait on the join-group future and just poll with zero timer. Reviewers: Jason Gustafson <jason@confluent.io>
显示
- clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java 8 个添加, 9 个删除...java/org/apache/kafka/clients/consumer/KafkaConsumer.java
- clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java 10 个添加, 3 个删除...kafka/clients/consumer/internals/ConsumerCoordinator.java
- clients/src/test/java/org/apache/kafka/clients/consumer/KafkaConsumerTest.java 7 个添加, 2 个删除.../org/apache/kafka/clients/consumer/KafkaConsumerTest.java
加载中
想要评论请 注册 或 登录