小红书消息中间件的运维实践与治理之路

简介: 近年来,消息领域的全面云原生化逐渐走向深入,比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式,再比如 Kafka3.0 引入了分层设计的方式(tiered storage)和 raft 模式,以及近年来新崛起的 Pulsar 也开始采用云原生架构,在未来都可以针对具体业务需求引入进行功能迭代,发挥组件的最大价值。

1.png

作者:张亿皓|小红书消息中间件负责人


一、消息队列业务场景与挑战


1、整体规模


下图展示了 RocketMQ 和 Kafka 的总体规模。其中峰值  TPS 的 8000w/s 一般出现在晚上下班以后的时间段,写入量达到50GB/s,每天新增2-3PB数据,节点数1200+个。


2.png


2、业务架构


虽然 RocketMQ 和 Kafka 的性能相似,但在使用场景上还是有所区别的。RocketMQ 丰富的业务特性更适用于在线业务场景,而 Kafka 的高吞吐性使其更偏向离线、近线业务。当然,在实际应用中也会有交叉使用的现象,有时在线业务也会使用 Kafka 解耦,有的流处理数据也会使用 RocketMQ 存储。


业务总体架构如下图所示,业务日志和APP用户行为打点类的内容会发给 Kafka,数据库增量日志、在线业务、线上数据交换等会发给 RocketMQ。Kafka 和 RocketMQ 中的数据会有一部分流入 flink 中构建实时数仓、离线数仓以及一些数据产品(如报表、监控,等),RocketMQ 中另一部分数据会用于在线业务APP异步解耦。

image.gif

3.png

消息队列业务架构


3、稳定性挑战


a.   背景:

小红书整体收敛消息组件较晚,公司技术架构最大的目标是提升系统稳定性;


b.   挑战:

现存消息组件使用量极大,但没有稳定性保障;同时面临人手紧缺、时间紧,对MQ原理了解不深入的困境;


c.   策略:

先做监控,增强集群的可观测能力是了解其健康状况的最高效手段。


4、稳定性治理


除了监控告警,我们在稳定性治理方面还做了以下改造工作:


a.   引擎:资源隔离,新增监控打点等;


b.   平台:工单审核,权限管控,业务追溯;


c.   治理:针对集群可视化能力和集群可运维能力的建设;


4.png


二、消息队列治理实践


1、集群可视化:监控metrics


下图是基于 Prometheus Grafana 构建的消息中间件体系架构。


5.png

消息中间件监控体系架构图


图中包含三个监控维度:硬件维度、服务维度和业务维度,累计收集监控指标150+项。

那么如何定义这三个维度的监控指标呢?


a. 硬件维度:主要包括网络带宽、CPU使用率、磁盘容量/IO、TCP丢包/延迟等资源指标;


b. 服务维度:主要指运行状况的指标,如:宕机监控、JVM指标、读写时延、请求队列等;


c. 业务维度:即面向用户的指标,这是客户比较关心的指标,如:消费延迟/积压、QPS、Topic吞吐量、Offset等;


由于公司内部规定一个节点只能使用一个端口给Prometheus,而各项监控指标大多是分开收集,于是设计了指标聚合服务 MAS 将所有指标汇集在一起,同时又增加了一些元信息帮助进一步排查问题。这里 MAS 相当于metric 的一个代理层,可以根据业务的实际情况来添加。


2、告警处理


下图列举了一些发生在监控体系刚建立时候的告警信息,当时每天的告警信息约有600-700条之多,告警的问题也是各式各样,根本无法处理,造成监控系统形同虚设。

image.gif

6.png

7.png


鉴于以上情况,我们提出监控的核心原则要宁缺毋滥,不要淹没在告警海中,告警太多和没有告警没什么区别。根据这一原则制定了一系列应对策略:


  • 初期:关闭低优告警,以确保每一条高优告警能得到及时发现和处理;


  • 中期:随着高优告警的减少,逐步打开之前屏蔽的告警,进一步处理,实现告警数量逐步减少;


  • 后期:打开全部告警,确保日常告警每一条都能及时发现和处理。

根据我们的经验,到后期基本不会有“服务不可用”这类的告警,大部分告警属于预警,如果预警能及时介入处理,就可以确保在问题进一步扩大之前解决。


8.png

告警处理阶段性策略


3、集群可视化:metric设计与优化


RocketMQ 的服务、业务指标监控,基于开源 RocketMQ-exporter 进行改造,解决 metrics 泄漏、部分指标采集偏差等问题。


这里着重介绍两个比较重要的改造:


a.   lag监控优化


  • 问题一:consumer metric 泄露,exporter 运行几天指标量就可达到 300w+,curl 一次接口花费时间 25s,log文本有600MB;    


原因:如下图所示,每接入新的客户端,端口值就会增加,由于exporter实现中没能将离线客户端指标值及时清理造成客户端端口持续增加导致系统告警。

image.gif

9.png


改造:在exporter中加入metric expire模块;


结果:curl一次接口花费的时间降到2s;


  • 问题二:lag指标不准,造成线上误告警


原因:export只提供group维度的 rocketmq_group_diff,没有 broker 维度的,要额外计算;


改造:在 broker 中加入计算逻辑,先将 lag 计算好;


结果:可以从下图中看到,消息积压值从 6K 的抖动恢复成平稳值;


10.png


b.   分位线/滑动窗优化


  • 问题一:线上时常会遇到 broker busy 的问题,需要对发生的时间点进行监控。虽然 exporter自带 send pool 等指标,但为瞬时值,几乎没有参考意义;


改造:在 broker 中加入计算5分钟内最大值的指标;


结果:


11.png


  • 问题二:消息写入耗时是历史最大值,参考作用有限;


改造:优化为5分钟内耗时,以及P99/P999等分位值;


结果:得到准确的消息写入耗时。

image.gif

12.png


4、集群可视化:巡检系统


巡检系统与监控系统的区别是:监控系统是反应瞬时的问题,变化很快,需要及时发现和处理,呈现形式相对固定;巡检系统则是长期工作的监督,针对静态环境和配置,变化较少,呈现形式更加自由。


随着治理工作的持续开展,如何确认一个集群达到健康状态?


a.  严格按照部署标准部署集群,包括硬件配置、运行参数、可用区等,对所有集群进行定期巡检,产出报表反映集群状况;


b.  共制定核心标准20+项,巡检结果以表格形式呈现,如下图表格。


13.png14.png


c.  由于指标过多无法从判断问题,因此设定了集群健康分体系,是基于集群的可用性只能通过唯一指标反映的思想,将每个指标设置一个权重,通过最终的分值来判断集群是否存在问题,如下图所示:


15.png

5、集群可视化:消息对账监控


在设计告警时,总会有些没有考虑到的告警项,这里的解决方案是消息对账系统,它可以有效监控消息延迟、丢失和集群健康度。


消息对账系统的优势在于它提供端对端的监控,包罗多项监控的效果,并且它的自驱力可以替没有考虑到的告警项兜底,故障的发现和定位也被独立开。

image.gif

16.png

消息对账监控系统

image.gif

17.png18.png19.png


在 Kafka 社区提供了相应的 Kafka Monitor 组件,我们将这个组件进行服务化改造,提供自动化添加新集群监控的能力,减轻运维的压力。


6、集群可运维:自动化平台


可运维能力的建设是通过自动化来实现的,其根本目的是释放人力。


下图展示的是topic迁移工具,从RocketMQ和Kafka两部分改造:


a.   RocketMQ

  • 修改 nameserver delete 逻辑,支持在 broker 间自动迁移 topic;
  • 同时处理 consumer-group,retry/dlq topic;
  • 依赖自研管理平台;


b.   Kafka

  • 基于 reassign 改造,自定义 reassign 算法,减少 partition 搬迁的影响;
  • stage 工作流化,每一步自动执行,人工确认下一步操作;
  • 集成自研管理平台。


20.png

Topic迁移工具


三、未来的探索与规划


近年来,消息领域的全面云原生化逐渐走向深入,比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式,再比如 Kafka3.0 引入了分层设计的方式(tiered storage)和 raft 模式,以及近年来新崛起的 Pulsar 也开始采用云原生架构,在未来都可以针对具体业务需求引入进行功能迭代,发挥组件的最大价值。


欢迎加入钉钉群与 RocketMQ 爱好者讨论交流:


21.png

钉钉扫码加群


相关文章
|
6月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
7月前
|
存储 运维 安全
运维知识沉淀工具深度解析:从结构设计到落地实践全拆解
运维知识沉淀工具助力团队将零散经验结构化存储,实现问题处理路径标准化、知识复用化。通过标签、模板与自动化调取机制,让每次处理都留下可复用资产,提升团队协同效率与系统稳定性。
|
6月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
6月前
|
机器学习/深度学习 人工智能 运维
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
这篇文章系统性地阐述了 AI 原生时代下,面向技术风险领域的智能体系统(DeRisk)的架构设计、核心理念、关键技术演进路径与实践落地案例。
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
|
数据采集 机器学习/深度学习 人工智能
智能运维在IT管理中的实践与探索
【10月更文挑战第21天】 本文深入探讨了智能运维(AIOps)技术在现代IT管理中的应用,通过分析其核心组件、实施策略及面临的挑战,揭示了智能运维如何助力企业实现自动化监控、故障预测与快速响应,从而提升整体运维效率与系统稳定性。文章还结合具体案例,展示了智能运维在实际环境中的显著成效。
595 133
|
8月前
|
运维 监控 负载均衡
高效运维实践:常见问题的应对策略与实践经验
本文探讨了运维工作中的五大核心挑战及应对策略,涵盖负载均衡优化、数据库性能提升、系统监控预警、容器化与微服务运维等方面,旨在帮助企业提升系统稳定性与运维效率。
|
9月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
8月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
529 17