AdminClient 中的listConsumerGroupOffsets获取不到consumergroup;
网上查找资料说:
- listConsumerGroupOffsets() 请求返回的消费位移信息未及时更新,仍是稍早时刻的状态。 由于 listConsumerGroupOffsets() 请求需要从 Broker
获取最新的位移信息,如果响应结果的更新不够及时,返回的位移值可能不是最新的状态。- 消费位移信息尚未从 Producer 传输至 Broker 的 __consumer_offsets 主题。 消费者提交的位移信息需要由 Producer 生产并写入 __consumer_offsets 主题,Broker 才会在
listConsumerGroupOffsets() 请求中返回对应的最新位移。如果 Producer 的传输未完成,Broker
端无法获取到最新的位移信息。- 自动提交位移参数设置不当,位移提交不精确。 如果 enable.auto.commit 设置为 true,并且提交间隔过长,实际消费位移的变化可能超过了自动提交的频率,导致 listConsumerGroupOffsets()
无法获取到最新的位移。- 其他异常原因,如网络故障、请求超时等。
排除以上问题。
通过kafka-consumer-groups.sh查看:
sh /usr/local/kafka/kafka_2.13-2.7.2/bin/kafka-consumer-groups.sh --bootstrap-server xxx:9092 --describe --group Test
发现多个获取不到消费位移的都出现了“has no active members”,所以应该是AdminClient获取不到no active members的consumergroup消费信息。
后面通过查看源码发现KafkaAdminClient 处理了这个问题,所以做了类型转换。后面成功了。
KafkaAdminClient kafkaAdminClient = (KafkaAdminClient) adminClient;
ListConsumerGroupOffsetsResult listConsumerGroupOffsets = kafkaAdminClient.listConsumerGroupOffsets(groupID);