消息队列 Kafka版提供以下 Topic 和 Group 管理相关的常见问题供您参考。
FAQ 列表
为什么 Group 列表中多了一些 Group?
通过消息队列 Kafka版控制台或 OpenAPI 查看指定实例的 Group 列表时,发现列表中的 Group 数量比手动创建的数量更多,即出现了一些非手动创建的 Group。该现象的主要原因如下:
- 开启了自由使用 Group 功能,消息队列 Kafka版自动创建了一些 Group。开启自由使用 Group 功能后,您可以直接在消费 SDK 中指定一个符合命名要求的 Group ID 进行消费,此 Group 会显示在实例的 Group 列表中。
- 创建并启动了 Connctor 任务。 Connector 任务启动后,消息队列 Kafka版会自动为指定实例创建一个 Consumer Group,用于消费指定 Topic 中的数据。该 Group 名称以 connect-task 为前缀,并显示在该实例的 Group 列表中。
- 您之前如使用过
Assign
方式提交消费位点,那么也会在 Kafka 集群上创建对应的 Group。
为什么 Group 会被自动删除?
消息队列 Kafka版支持自动删除 Group(auto.delete.group) 功能,您可以设置后端服务是否自动删除 Empty 状态的消费组。开启后,如果消费者组中的所有消费者处于 Empty 状态,超出消费位点保留时长后会自动删除该消费者组;关闭后,消费进度的自动删除不影响消费组的状态,Empty 状态的 Group 也不会被系统自动删除。
当 Group 被自动删除后,您可以查看实例的参数配置中,自动删除 Group 一项的设置是否开启。参数配置方式请参考修改参数配置。
为什么无法删除 Group?
消费组当前无消费者正在消费时,Group 的状态为 Empty。仅 Empty 状态的 Group 可以删除。删除 Group 前需要检查 Group 状态是否为 Empty。
为什么看不到 Group 的消息堆积量,或堆积量为 0?
查看 Group 的消费状态时,如果当前的消费位点与最大位点不一致,但页面未显示 Group 的堆积量数据,或堆积量显示为 0。该现象的主要原因如下:
- 客户端从未提交过消费位点,或者提交的消费位点已过期。
- 客户端提交过消费位点,且消费位点未过期,但由于部分消息数据被过期删除,导致消费位点小于或者等于最小位点。
为什么消息的存储时间显示为 1970?
根据位点查询消息时,可能存在部分消息的存储时间显示为 1970。
可能原因如下:
- 客户端版本过低。建议升级客户端版本至 0.10.2 及后续版本。
- 客户端传递的时间戳(createTime)为 null。客户端应传递正确的时间戳,或选择使用服务端落盘时间。
为什么消息在 Topic 分区中分布不均衡?
Topic 详情页中展示每个分区的存储消息数量。Producer 发送消息到指定 Topic 之后,消息在该 Topic 的不同分区中可能存在分布不均衡的现象,即部分分区中消息数量非常多,部分分区中消息数量非常少。
这种消息在分区中分布不均衡的情况可能由以下原因造成。
- Producer 发送消息时,指定分区进行发送。指定分区时,消息仅发送到对应的分区,所以未被指定的分区中不会存储消息。
- Producer 发送消息时,指定了消息 Key。指定消息 Key 时,消息会根据 Key 存储到对应的分区。
- 业务逻辑中另外定义了消息在分区中的分配策略,该策略导致了消息在分区中不均衡的现象,建议排查相关的业务实现逻辑。
为什么 Group 的订阅关系显示为空?
- 问题现象:
Consumer 某个 Group 已启动消费,但在消息队列控制台上查看不到此 Group 订阅的 Topic 信息,也没有对应的消费状态。主要表现为:
- 在指定 Group 详情页的概览统计区域,订阅Topic一栏中显示数量为 0。
- 在指定 Group 详情页的消费状态区域,Topic 一列中显示为空。
- 主要原因如下:
- 客户端配置错误。建议检查 Kafka 客户端的消息订阅相关配置。
- 客户端网络环境异常,无法成功连接 Kafka 实例。您可以通过 ping 或 telnet 命令测试 Kafka 实例的连通性,判断是否可成功连接 Kafka 实例。
- 客户端未提交消费位点。如果客户端采用
assign
方式手动指定 Consumer 订阅指定 Topic 分区的消息,但并未提交消费位点,也可能造成此问题。