我们注意到我们的一个产品主题(6 个分区)存在一个奇怪的问题,其中我们的消费者(dotnet 核心,只有 1 个实例)只能从 3 个分区(0、1、3)读取。这显然会影响应用程序的行为,因为消费者缺少来自其他 3 个分区(2、4、5)的消息。我们能够验证主题配置没有问题。由于消息过期而怀疑存在偏移提交问题,我们删除了该主题中的所有消息(通过将保留期更改为一个小数字),但这并没有解决问题。我们尝试了多次重启消费者应用程序,每次分区分配都保持不变(0,1,3),这让我们相信其他分区有问题。我们正在考虑创建一个新主题的想法。想法,我会把它贴在这里检查我们是否遗漏了什么。任何输入表示赞赏。谢谢。
2 回答
1
- 首先,检查并确认所有分区都在接收来自生产者的消息
- 确认后,检查消费者启动时的分区分配策略,确认消费者客户端分配了主题的所有分区。如果无法使用消费者客户端本身,
kafka-consumer-groups.sh
则可以使用实用程序 - 确保没有其他消费者客户端具有相同
group_id
的运行和消费来自主题的消息
使用 kafka-consumer-groups.sh 列出所有消费者组
kafka-consumer-groups.sh --list --bootstrap-server <kafka-broker>:<port>
上面的命令将列出集群管理的所有主题的所有消费者组。
缩小到您感兴趣的消费者组后,使用以下命令列出消费者组的消费者部分。
kafka-consumer-groups.sh --bootstrap-server <kafka-broker>:<port> --describe --group <your-consumer-group>
kafka-consumer-groups.sh 脚本返回有关主题分区的所有信息,包括
- 当前偏移量 - 此消费者实例的分区已消费消息的当前最大偏移量
- 日志结束偏移量 - 分区中最新消息的偏移量
- 滞后 - 消耗的偏移量和最新的偏移量之间的差异
- 客户端 ID - 用于区分同一消费者组中的各个客户端的 ID
示例 1: 当前偏移量为 4,延迟为 2,客户端 ID 为空 - 意味着消费者客户端不再注册并处理任何消息。另请注意消息说消费者组中没有活动成员。
kafka-consumer-groups.sh --bootstrap-server <broker-host>:9092 --describe --group my-group
Consumer group 'my-group' has no active members.
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-group my-topic 0 4 6 2 - - -
示例 2: 当前偏移量为 4,滞后量为 2,客户端 ID 不为空 - 表示消费者客户端当前未处理消息。但是,它更早地处理了一些消息。
kafka-consumer-groups.sh --bootstrap-server <broker-host>:9092 --describe --group my-group
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-group my-topic 0 4 6 2 test-client-31ca0f5d-958e-4a30-b028-e3d975b41fd6 /0.0.0.0 test-client
示例 3: LOG-END-OFFSET 为 0。因此,到目前为止,还没有产生到该主题的消息。
kafka-consumer-groups.sh --bootstrap-server <broker-host>:9092 --describe --group my-group
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-group test1 0 0 0 0 test-client-08763d84-c4be-49f8-a75f-286c1968f6f9 /0.0.0.0 test-client
示例 4: CURRENT-OFFSET 为 0。但 LOG-END-OFFSET 为 2,LAG 也为 2 - 表示此主题分区中有消息。但是,它没有被消耗。
kafka-consumer-groups.sh --bootstrap-server <broker-host>:9092 --describe --group my-group_new_4
Consumer group 'my-group_new_4' has no active members.
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
my-group_new_4 test1 0 0 2 2 - - -
这将帮助您找出在此答案开头提出的问题,并隔离/解决问题。
于 2021-12-20T03:47:37.197 回答
0
您使用的是集团消费者客户端吗?如果是这样,则有可能另一个消费者(不同的应用程序)正在使用相同的“group_id”从该主题消费。在这种情况下,其他 3 个分区(2、4、5)可以分配给其他消费者客户端。
于 2021-12-18T08:45:53.473 回答