本文提供以下 Topic 和 Group 管理相关的常见问题,包括权限管理相关的配置操作及常见异常的原因描述和处理办法。
支持。消息队列 Kafka版支持配置 ACL 权限策略,即指定不同 SASL 用户对于指定 Topic、Group 的权限。
在控制台的ACL管理页签中单击新增ACL,并填写 ACL 策略。详细的操作步骤请参考创建 ACL。 消息队列 Kafka版不支持删除指定的某一条消息,但是您可以通过删除 Topic 或修改 Topic 的消息保留时长来批量删除消息。
- 删除 Topic:直接删除 Topic 会同时删除此 Topic 中存储的所有消息,请谨慎操作。
- 修改 Topic 的消息保留时长:缩短 Topic 的消息保留时间,加速 Topic 中的消息老化速度。该方式也会批量删除消息,请谨慎操作。
Broker 会如实记录 Consumer 客户端提交的消费位点信息。通常情况下,消费位点的提交机制取决于对接的 Kafka 客户端 SDK,SDK 通过以下两种机制指定消费位点:
- 自动提交消费位点:Kafka 客户端 SDK 按照指定的时间间隔,将已消费的最新消息对应的位点+1 提交到 Broker。
- 手动提交消费位点:Kafka 客户端 SDK 通过应用程序,把消费过的最新消息的位点+1 提交到 Broker。
您可以在控制台 Group 详情页的消费状态区域,找到指定 Topic 对应的提交offset位置一列,该位点即 Consumer 客户端提交的消费位点,Consumer 消费时,会从这个位点继续消费。详细操作步骤请参考查看 Group 详情。 消息队列支持重置 Group 的消费位点,重置方式如下。详细的说明请参考重置消费位点。 - 根据最新 offset 位点重置:跳过所有堆积消息,从最新位点开始消费。堆积的消息本身并不会因此被删除。
- 根据时间点重置:从过去的某个指定时段内选择一个时间点开始消费。该时间段由 Topic 的消息保留时间决定。
- 根据指定 offset 位点重置:从当前分区的某个指定位点开始消费。重置后,Group 在当前分区中将指定位点开始消费。
Group 不需要订阅 Topic 时,如何删除订阅关系?
在控制台删除 Topic 或删除 Group 都无法删除订阅关系,您需要在 Kafka 客户端中取消订阅该 Topic。
为什么会创建 Topic 失败且报错 Unexpected error code:999?
使用火山引擎消息队列 Kafka 时,如遇创建 Topic 失败,且报错 Unexpected error code:999,说明创建的 Topic 分区超出限制。分区过多会使集群性能和稳定性急剧下降,建议单实例总分区数控制在规格上限的 80% 以内。如需更多分区总数,请通过控制台对实例进行规格变更(升配),或提交工单并联系技术人员进行咨询。 Topic 详情页中展示每个分区的存储消息数量。Producer 发送消息到指定 Topic 之后,消息在该 Topic 的不同分区中可能存在分布不均衡的现象,即部分分区中消息数量非常多,部分分区中消息数量非常少。
这种消息在分区中分布不均衡的情况可能由以下原因造成。
- Producer 发送消息时,指定分区进行发送。指定分区时,消息仅发送到对应的分区,所以未被指定的分区中不会存储消息。
- Producer 发送消息时,指定了消息 Key。指定消息 Key 时,消息会根据 Key 存储到对应的分区。
- 业务逻辑中另外定义了消息在分区中的分配策略,该策略导致了消息在分区中不均衡的现象,建议排查相关的业务实现逻辑。
为什么 Group 列表中多了一些 Group?
通过消息队列 Kafka版控制台或 OpenAPI 查看指定实例的 Group 列表时,发现列表中的 Group 数量比手动创建的数量更多,即出现了一些非手动创建的 Group。该现象的主要原因如下:
- 开启了自动创建 Group 功能,消息队列 Kafka版自动创建了一些 Group。开启自动创建 Group 功能后,您可以直接在消费 SDK 中指定一个符合命名要求的 Group ID 进行消费,此 Group 会显示在实例的 Group 列表中。
- 创建并启动了 Connector 任务。 Connector 任务启动后,消息队列 Kafka版会自动为指定实例创建一个 Consumer Group,用于消费指定 Topic 中的数据。该 Group 名称以 connect-task 为前缀,并显示在该实例的 Group 列表中。
- 您之前如使用过 Assign 方式提交消费位点,那么也会在 Kafka 集群上创建对应的 Group。
消息队列 Kafka版支持自动删除 Group(auto.delete.group) 功能,您可以设置后端服务是否自动删除 Empty 状态的消费组。开启后,如果消费者组中的所有消费者处于 Empty 状态,超出消费位点保留时长后会自动删除该消费者组;关闭后,消费进度的自动删除不影响消费组的状态,Empty 状态的 Group 也不会被系统自动删除。
当 Group 被自动删除后,您可以查看实例的参数配置中,自动删除 Group 一项的设置是否开启。参数配置方式请参考修改参数配置。 消费组当前无消费者正在消费时,Group 的状态为 Empty。仅 Empty 状态的 Group 可以删除。删除 Group 前需要检查 Group 状态是否为 Empty。
为什么看不到 Group 的消息堆积量,或堆积量为 0?
查看 Group 的消费状态时,如果当前的消费位点与最大位点不一致,但页面未显示 Group 的堆积量数据,或堆积量显示为 0。该现象的主要原因如下:
- 客户端从未提交过消费位点,或者提交的消费位点已过期。
- 客户端提交过消费位点,且消费位点未过期,但由于部分消息数据被过期删除,导致消费位点小于或者等于最小位点。
- Consumer 某个 Group 已启动消费,但在消息队列控制台上查看不到此 Group 订阅的 Topic 信息,也没有对应的消费状态。主要表现为:
- 在指定 Group 详情页的概览统计区域,订阅Topic一栏中显示数量为 0。
- 在指定 Group 详情页的消费状态区域,Topic 一列中显示为空。
- 客户端配置错误。建议检查 Kafka 客户端的消息订阅相关配置。
- 客户端网络环境异常,无法成功连接 Kafka 实例。您可以通过 ping 或 telnet 命令测试 Kafka 实例的连通性,判断是否可成功连接 Kafka 实例。
- 客户端未提交消费位点。如果客户端采用 assign 方式手动指定 Consumer 订阅指定 Topic 分区的消息,但并未提交消费位点,也可能造成此问题。
删除 Group 后,为什么还有此 Group 的监控数据?
云监控以分钟为维度采集 Kakfa 实例的各项监控数据,并将原始监控数据根据各种聚合与计算规格进行整理,处理后的数据才会显示在监控图表中。监控数据从变化到体现在监控图表中,其中时间差大约在10分钟左右。删除 Group 等其他资源之后,建议在一段时间之后再查看对应监控数据的变化。