当Kafka出现消费堆积、倾斜、流量被限流等异常时,您可以查看Group和Topic之间的订阅关系,获取Topic各个分区的消费进度,了解消息的堆积总量,及时调整业务、预防风险。
注意事项
建议一个消费组不要订阅超过三个Topic,避免消息堆积。
当您使用
assign
消费模式时,请及时手动提交消费位点,避免实际已消费消息,却由于未提交位点显示消息堆积。若堆积量较大,请检查消息消费速率和生产速率,若前者小于后者,建议您通过提升消费能力的方式来缓解。
查看Topic被订阅的Group
登录云消息队列 Kafka 版控制台,在概览页面的资源分布区域,选择地域。
在实例列表页面,单击目标实例名称。
在左侧导航栏,单击Topic管理。
在Topic管理页面,找到目标Topic,在其操作列,选择 。
在Topic 详情页面的订阅关系页签,显示所有订阅该Topic的Group。
在订阅当前 Topic 的在线 Group 的列表中,找到目标Group,在其右侧操作列,单击消费详情。
在消费详情列表,显示该Topic各个分区的消费详情。
参数
说明
分区 ID
该Topic分区的ID。
客户端
实时订阅该Topic的在线Consumer。
说明取值格式为
<Client ID>_/<IP>
。非在线消费端则无法查看客户端信息。
最大位点
该Topic在当前分区下的最大消息消费位点。
消费位点
该Topic在当前分区下的消息消费位点。
堆积量
当前分区下的消息堆积总量,即最大位点减去消费位点的值。
重要堆积总量是一个关键指标,如果发现堆积总量较大,则应用消费端可能产生了阻塞,或者消费速度跟不上生产速度。此时需要分析消费端的运行状况,提升消费速度。更多信息,请参见重置消费位点。
查看Group订阅的Topic
在实例列表页面,单击目标实例名称。
在左侧导航栏,单击Group 管理。
在Group 管理页面,找到目标Group,在其操作列,选择 。
在Group 详情的消费状态页签,显示该Group订阅的所有Topic以及各个Topic的堆积量。
在Topic列表,找到目标Topic,在其右侧操作列,单击消费详情。
在消费详情列表,显示该Group在相应Topic的各个分区的消费详情。
参数解释请参见上文。
常见问题
为什么Kafka分区消息堆积,下游消费却无异常?
下游可能采用了assign
消费模式,位点是您自己管理的。这种情况下虽然显示了堆积,实际上您可能已经消费了,但是没有提交位点。建议您及时手动提交位点解决消息堆积问题。
消息消费速率小于生产速率导致消息堆积时,如何增加消费能力?
可以通过提升消费能力的方式来缓解,有以下两种方案:
增加Consumer实例个数。可以在进程内直接增加(需要保证每个实例对应一个线程),也可以部署多个消费实例进程。需要注意的是,实例个数超过分区数量后就不再能提高速度,否则将会有消费实例不工作。
增加消费线程。更多信息,请参见提高消费速度。
有消息堆积就一定是出现问题了吗?
不一定。一般分为以下三种情况:
最近消费时间与当前时间接近,并且堆积量保持在一个稳定的数值之间波动,没有持续扩大。说明客户端一直在拉取最新消息,没有消息堆积,属于正常情况。
堆积量逐步扩大,并且消息位点一直不变。客户端的消费线程因为某些原因卡住,没有继续消费,也没有继续向服务端提交位点,属于异常情况,即消息的确堆积了。
更多信息,请参见使用云消息队列 Kafka 版时出现消息堆积。
相关文档
如果您希望通过API方式查询消费状态,请参见GetConsumerProgress - 查询消费组消费状态。
如果您暂时不想处理堆积的消息,可以通过重置消费位点的方式跳过堆积消息。