前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次哈啰物联网平台规则引擎kafka消息积压线上事故复盘

记一次哈啰物联网平台规则引擎kafka消息积压线上事故复盘

作者头像
陶朱公Boy
发布2022-10-28 14:23:19
3540
发布2022-10-28 14:23:19
举报
文章被收录于专栏:用户10106051的专栏

背景

2022.1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈明显上升趋势,一路飙到50W左右。

现象一:kafka积压图

这幅图比较明显可以看出,消费者消费速度跟不上生产者的生产消息速率,导致客服端消费出现积压的情况。

现象二:kafka消费详情监控大图

当时现场图后来就找不回来了,凭印象说明了一下数字。

这幅图经过分析我们知道这个topic对应的partition默认是20,由于我的消费组内消费者实例数是17个,所以从宏观上分析,势必会有3个消费者会承担多消费一个分区的情况。

其他都会只是1个实例消费一个partition的情况。

原因分析

原因主要还是跟消费者自身的消费速率有关。

忙日志分析

规则引擎拿到设备消息后会同步调用下游一个LBS地图服务。

过程:将设备上报的内容(含地理位置信息)经过LBS平台服务,换取设备当前地理位置坐标信息。

在终端输入命令:thread-n3-i 500

阿里开源诊断工具Arthas:thread命令

列出500毫秒内最忙的3个线程栈,其中就有两个属于调用地理位置服务的线程。

上述说明这个地理位置服务其实吞吐率并不高。

查看下游服务指标

这幅下游服务指标更形象的说明这一点。

总结

通过上述的分析我们​总结以下原因:

1)消费者线程数设置不合理

我们自己封装了相应SDK:HMS-Client。

应用内设置了消费线程的数量是5。

这个项目是其他项目拷贝过来,其他项目可能流量没那么大,所以设置了比较低的值。

意思是最高只会有5个线程去拉取消息来消费。

因为我的应用资源利用率不高,提高消费线程数是合理的。

2)尽可能提高单个消费者利用率

目前只有2-3个实例会去处理多个partition,其他大多数实例只会处理一个partition,在不缩容服务实例数的情况下(我的实例数是17个),当下实例的处理效率是不高的。

解决方案

第一步:

增加KAFKA的分片数(临时止血方案)让中间件从原来的分片数20调整到60,积压下降的非常明显。消费组内的消费者实例一个承担了基本3-4个分区消息数。

第二步:

调整Client 消费线程数,从原来的5调整到20个线程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陶朱公Boy 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 原因分析
  • 总结
  • 解决方案
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档