Kafka adminClient 与 kafka-consumer-groups.sh 使用的查询 Consumer Group 的 API 不同所致。
adminClient 使用的是 Admin API,需要连接到 Broker 进行查询。而 kafka-consumer-groups.sh 使用的是 Consumer Group Command API,直接查询 Zookeeper 中存储的 Consumer Group 信息。
由于历史原因,Kafka 的 Consumer Group 信息存储在 Zookeeper 中,API 层进行了封装,通过 Admin API 与 Consumer Group Command API 提供查询接口。但两者查询的信息可能存在差异,导致 listConsumerGroups() 获得的 Group 信息不完整。
要解决此问题,有以下几个思路:
- 使用 Consumer Group Command API 进行查询 可以使用 kafka-consumer-groups.sh 工具查询,或使用 Confluent Kafka Client 的 ConsumerGroupCommand API 进行查询。
- 检查 ACL 配置 如果 ACL 策略过于严格,adminClient 可能无法查询到全部 Consumer Group 信息,需要调整 ACL 策略。
- 等待数据同步 Consumer Group 信息首先写入 Zookeeper,然后同步至 Kafka。如果同步存在延迟,adminClient 查询 Kafka 时可能获得不完整信息。等待一段时间后再查询可能会解决此问题。
- 直接查询 Zookeeper 可以连接至 Zookeeper,查询 /consumers path 下保存的 Consumer Group 信息。但此方法需要了解 Zookeeper 中 Kafka 数据结构,较难实现。 所以,建议优先使用 Consumer
Group Command API 进行查询,或检查 ACL 策略,确保 adminClient 有足够权限查询 Consumer
Group 信息。