前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ckafka消费慢的通用排查方法

ckafka消费慢的通用排查方法

原创
作者头像
Daqu
发布2020-11-15 21:53:32
1.7K0
发布2020-11-15 21:53:32
举报

背景

ckafka消费慢是用户经常遇到的问题,消费慢直接体现为消息堆积数上升,消息堆积数上升意味这消费者没有及时消费到消息,依赖消费者的下游应用就可能堵塞。因此,在观测到ckafka消费慢后及时进行有效排查、定位问题,用于降低消费慢对业务的影响,是很有必要的。

与自建kafka不同的是,客户无法看到ckafka的服务端数据比如broker的日志。因此,客户不能通过查看各个组件日志的方法排查问题,从而只能提工单咨询。从这一点出发,这篇文章介绍一些客户可操作的,针对ckafka的通用排查方法。

1.问题分析

1.2消息传递链路

生产太快、服务端出问题、消费客户端出问题和下游应用出问题是导致消息堆积的主要原因。ckafka的消息链路如下:

生产客户端 --> Ckafka --> 消费客户端 --> 应用A --> 应用B... ...

通用排查方法的核心思想就是从上游往下游,从使用者角度一个个排查。

1.3生产端分析

生产消息速度大于消息消费速度是生产导致消息堆积的唯一原因。这个可以直接在ckafka控制台的监控栏看到。

1.4服务端分析

服务端导致消费慢的原因有很多,比如集群负载高导致请求处理慢,这种情况从客户视角来看是很难发现的。在这里给出一个简单的方法用于确认是否服务端出了问题,即新建测试topic使用kafka命令行工具测试实例消费带宽能否跑满,工具可以从官网下载,操作方法可以参考CKafka系列学习文章 - CKafka入门型配置压测报告(十五)

当实例消费带宽能够通过压测脚本跑满时,基本可以排除服务端出问题的可能性。

1.5客户端分析

客户端的排查可以从两方面入手:

  • 配置
  • 负载

配置方面首先看主题的分区数与订阅该主题的消费组的消费者数量。主题的分区数量反映了其可以同时被多少个消费者消费。当消费者组的消费者数量大于主题分区时,消费组中就会有部分消费者空跑。ckafka中主题的分区越多,消费能力越强,可以把主题看成是一个装满水(水看成是消息)的杯子,分区就是一根根插进杯子的吸管。吸管多但是使用吸管的人少,吸水速度也上不去,这种情况就是分区多,消费者数量少。使用吸管的人多但是吸管少,吸管的数量决定了人再多,吸水速度也上不去,这种情况就是分区少,消费者数量多。消费者数量过多还可能导致重平衡,kafka重平衡时无法消费,当kafka反复重平衡时,消费客户端只能不断轮询服务端,然后在消费者稳定时“赶紧”消费。因此,消费者数量过多过少都不好,最理想情况是消费者数量和分区数量比例为1:1。在发现ckafka实例消费特别慢时,客户端排查第一步就是看分区是不是够多了,接着再看分区数量和消费者数量是不是1:1。

当分区和消费者都足够多的时候,如果消费速度还上不来,那就得看消费者的负载。具体来说,是检查消费者进程所在节点或者所属容器节点的负载情况。看CPU负载情况、网卡出入流量等等。

1.6消费下游应用

消费下游应用的排查分两种情况讨论,分别是消费速度突然下降和消费速度一直就很低。

1.6.1消费速度突然下降

在已经排查服务端和消费客户端的情况下,对于下游应用需要检查应用最近是否有变更、负载有无发生变化。

1.6.2消费速度一直就很低

这种情况需要排查下游应用的逻辑,比如消息消费后用于写入数据库,需要检查这个过程是否存在慢查询。

2.小结

当观察到ckafka实例消费慢时,客户侧可以依次执行如下操作缩小排查范围:

  • 检查生产速度是否过高。
  • 使用压测脚本测试观察实例,确认服务端是否存在问题。
  • 检查主题分区数量与消费者数量是否相等,是否存在反复重平衡。
  • 检查消费客户端所在节点是否存在高负载。
  • 检查下游应用是否存在高负载。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 1.问题分析
    • 1.2消息传递链路
      • 1.3生产端分析
        • 1.4服务端分析
          • 1.5客户端分析
            • 1.6消费下游应用
              • 1.6.1消费速度突然下降
              • 1.6.2消费速度一直就很低
          • 2.小结
          相关产品与服务
          消息队列 CMQ 版
          消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档