全部产品
Search
文档中心

云消息队列 Kafka 版:使用云消息队列 Kafka 版时出现消息堆积

更新时间:Jul 09, 2026

使用云消息队列 Kafka 版时,可能会发现Group中出现消息堆积。本文介绍如何判断消息堆积是否属于正常情况,以及处理方法。

客户端消费流程

了解客户端消费流程,有助于理解消息是否堆积。一般情况下,客户端消费流程大致如下:

image

判断消息堆积是否属于正常情况

如果发现Group中出现消息堆积,请参见下列步骤,判断消息堆积是否属于正常情况:

  1. 登录云消息队列 Kafka 版控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,单击实例列表

  4. 实例列表页面,单击目标实例名称。

  5. 实例详情页面,单击左侧菜单栏中的Group管理

  6. Group管理页面,找到目标Group,在其操作列,选择更多>消费状态

  7. 消费状态页签,每间隔1分钟记录一次各个Topic分区的最近消费时间堆积量消息位点,然后进行下列判断:

    说明

    消息位点可通过单击详情按钮进行查看。

    • 最近消费时间与当前时间接近,并且堆积量保持在一个稳定的数值之间波动,没有持续扩大。 说明客户端一直在拉取最新消息,没有消息堆积,属于正常情况。

      说明

      消息堆积量会根据消息量、消费端位点提交频率的变化而变化,数值大并不一定表示堆积。例如,某个Topic的发送频率为10000 tps,消费端位点提交频率为1 s提交1次,正常情况下展示的堆积量可能会一直在10000左右波动,但并非意味着消息堆积了。

    • 堆积量逐步扩大,并且消息位点一直不变。 客户端的消费线程因为某些原因卡住,没有继续消费,也没有继续向服务端提交位点,属于异常情况,即消息的确堆积了。请参见下文的消息堆积的处理方式章节进行处理。

    • 堆积量逐步扩大,同时消费位点在前进。 说明客户端还在消费中,但是消息的消费速度慢于消息的发送速度。由于消息是客户端主动从服务端批量拉取,客户端消费流程中的步骤1一般不会是消费的瓶颈。此时,需要排查步骤2的消费耗时,请参见下文的消息堆积的处理方式章节进行处理。

      说明

      消息堆积大多是消费速度过慢或者消费线程阻塞造成的,建议不要在消费逻辑中有太多耗时的操作。

    • 分区消息堆积,下游消费却无异常。下游可能采用了assign消费模式,位点是您自己管理的。这种情况下虽然显示了堆积,实际上您可能已经消费了,但是没有提交位点。建议您及时手动提交位点解决消息堆积问题。

    • 若实例触发了消费限流,消费者并非完全无法拉取消息,而是消费速度受限,导致部分消息不能被及时消费,从而产生堆积。此时控制台显示的堆积量会上升,但消费位点仍在缓慢前进。建议结合实例监控确认是否触发限流。

    • 通常情况下,单个 Topic 的消息大量堆积不会直接影响同实例下其他 Topic 的正常消费。但如果堆积引发了磁盘读 IOPS 或流量过高(即冷读风险),则可能间接影响整体实例性能,导致其他 Topic 消费也变慢。建议在排查时关注实例级别的磁盘 IO 和网络流量监控指标。

消息堆积的处理方式

经过上述判断,确认消息的确存在堆积情况时,建议打印消息的消费耗时,或者根据堆栈信息查看线程执行情况。根据以下方案适当调整以加快消息的消费速度,避免出现消息堆积。

  • 增加Consumer实例个数。可以在进程内直接增加(需要保证每个实例对应一个线程),也可以部署多个消费实例进程。需要注意的是,实例个数超过分区数量后就不再能提高速度,否则将会有消费实例不工作。

  • 增加消费线程。更多信息,请参见提高消费速度

说明
  • Java进程可以通过Jstack打印消费者进程的堆栈信息。

  • 若出现消息堆积,同时控制台上消费状态出现异常,可能有Rebalance 现象,在Rebalance期间不会进行消费,导致大量堆积,具体原因是有大量客户端在此上下线。更多信息,请参见为什么消费客户端频繁出现Rebalance?

  • 若出现 read tcp i/o timeout 错误导致消息堆积,垂直扩容 Kafka 实例通常不能直接解决该问题。该错误更多与网络连通性或客户端配置有关,建议按以下步骤排查:

    1. 检查客户端与服务端之间的网络连通性是否稳定。

    2. 确认客户端版本,若低于 0.10.2 建议升级。

    3. 调整客户端参数 max.poll.interval.mssession.timeout.ms,避免因处理超时触发 Rebalance。

    4. 通过控制台查看消费状态页签,确认堆积量和位点变化是否符合预期。仅当确认是服务端资源瓶颈导致的超时时,才考虑扩容。

相关文档