东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

RocketMQ 在联想大数据中的应用简析

  • 2019-07-02
  • 本文字数:2884 字

    阅读完需:约 9 分钟

RocketMQ 在联想大数据中的应用简析

众所周知,RocketMQ 作为一款分布式、队列模型的消息中间件,具有以下特点:


  • 严格保证的消息顺序

  • 丰富的消息拉取模式

  • 高效的订阅者水平扩展能力

  • 实时的消息订阅机制

  • 亿级消息堆积能力


在复杂的应用场景中,将 RocketMQ 作为技术解耦的消息中间件,可以简化服务部署,以下是 RocketMQ 在联想大数据的实践分享。

场景分析

在联想大数据中,应用 RocketMQ 的使用场景中经常会出现:异步请求,应用解耦和日志处理等场景情况。


  • 异步请求的业务处理


经常遇到如下两种情况,一种为串行方式的业务流程(如图 1),另一种为并行方式的业务流程(如图 2)。


串行方式:在联想大数据解决方案中,针对顺序化、流程化的业务场景经常使用串行方式,实现 RocketMQ 的技术解耦。如在某卷烟厂的解决方案中,针对制烟流程,将各个车间的处理流程做为独立的业务体创建一个 Topic,对业务体中的各个处理阶段创建对应的 Tag,并按照制烟流程顺序进行数据推送、清洗、业务处理及监控等,如下图 1。



图 1


并行方式:因业务的独立性,处理流程可分开进行处理,相互之间没有业务交叉。这种情况下,我们可以考虑使用并行方式对业务流程进行技术解耦。在联想大数据的相关解决方案中,针对某汽车的数据监控及相关画像的流程中,一部分是基础业务处理流程,另一部分是通过 Bin Log 数据进行数据监控与消息提醒等附加处理业务流程。针对这种场景,我们在给客户进行程序部署时,便采用了并行方式,如图 2。



图 2


  • 错峰削谷


虽然联想商城的并发请求数不像淘宝、天猫、京东商城等互联网公司的并发请求数高,但在技术要求上经过多年的业务总结和摸索过程中,总结出适合联想的技术架构体系,以解决高并发数据带来的业务处理压力,并实现技术架构的高可用。


在应对高并发,处理高可用,保证不丢数据的前提下,我们使用 RocketMQ 做为应对特殊的业务处理流程的技术手段,需要在数据生产端承接瞬时高数据流量,在数据消费端平稳地将数据推送到下游业务线。


基本处理方法采用业界普遍的“漏斗”模式,如图 3:



图 3


  • 应用解耦


对于解耦架构来说,在联想物联网(IOT)的应用非常普遍。我们结合 StreamSets 进行二次开发,使用 StreamSets 通过界面上拖拽的方式制定数据流程,并在客户的解决方案中,说明 RocketMQ 区别于其他 MQ 组件的技术特点,针对客户的使用场景进行优化,使用 RocketMQ 进行解耦数据。


  • 日志处理


RocketMQ 的设计模式借鉴于 Kafka,且后者经常用于日志管理系统充当数据缓冲的角色。但


Kafka 过度依赖 ZooKeeper,而 RockerMQ 则可实现无 ZooKeeper 部署,简化安装部署工作,所以,在联想大数据业务线和解决方案中,将 RocketMQ 应用于日志处理业务,逐渐增加 RocketMQ 的使用率。

应用实例

在联想大数据解决方案中,目前使用 RocketMQ 的实例也有不少,下面就举个实例说明一下,我们是如何使用的。


目前,在联想大数据部门,我主要负责数据流组件研发,并基于 StreamSets 开源组件进行定制化开发。在给客户的解决方案或现场实施中,我们可以通过在界面上的操作,设定好相关参数,便可设计出符合客户需求的数据流。如图 4 所示:



在每一个功能模块上,我们只需要设置若干必要的参数配置,也可以通过在文本框中编写更多的参数配置,在启动数据流时,即可加载这些配置,并实现数据流中各个功能模块的初始化、启动等等功能。


在这个实例中,我通过开发一个 RocketMQ 的功能模块,并设定一些基本参数,如 NameServers 组、消费组名和 Topic,便可从 RocketMQ 服务端获取数据。


通过使用这个工具进行设计,大大降低了使用人员的学习门槛,而且也简化了开发流程。在对外的解决方案或项目交付过程中,极大地赢得了产品和交付工程师的认可,在各个 POI 项目中也 PK 掉不少大厂公司。

优势

在此仅对比 Kafka,在实际应用中所具备的优势:


  • 架构差异,简化部署


在集群部署上,Kafka 的部署,必须依赖 ZooKeeper,并实现 WaterMark 的监控和 Leader 的选举。而 RocketMQ 可实现不依赖 ZooKeeper 的部署,大大降低使用门槛和学习成本。


Kafka 架构设计



RocketMQ 架构设计,参考官网架构设计



  • 性能优势


1、RocketMQ 可支持上万 Topic 的创建和使用,并且不会影响实例的整体性能及处理能力


反观 Kafka,我们在使用 6000 左右的 Topic 时,整个集群性能突然下降,并有部分节点出现卡顿现象。


2、写入效率虽略低,但磁盘 IO 不是瓶颈


在实际测试过程中,同时写入 Kafka 和 RocketMQ 进行测试:


Kafka 的吞吐量高达 15~17w/s,体现出较高的吞吐量。这主要取决于它的队列模式保证了写磁盘的过程是线性 IO,但此时 broker 磁盘 IO 已达瓶颈,写入响应已经出现略大的延时,有小部分数据出现重试写入。


RocketMQ 的吞吐量基本保证在 11~12w/s,磁盘 IO 率虽已接近 100%,但消息写入内存后即返回 ack,由单独的线程专门做刷盘的操作,所有的消息均是顺序写文件。

在“坑”中摸爬滚打

在近些年的使用中,联想大数据逐渐在提高 RocketMQ 的使用率,不仅仅因为其具有区别于其他 MQ 消息中间件的优势,并且学习成本略低于 Kafka,更重要的是 RocketMQ 是阿里开源的消息组件,经过大量的生产实践,且在公司内部经历多年的版本更新,达到一个相当稳定的版本,而且各种学习资料也是相当丰富。


因此,在联想内部开始尝试 RocketMQ 作为各个业务线和解决方案中推荐使用的消息中间件。尽管在应用一种新的技术过程中会遇到各种各样的“坑”,但是在摸爬滚打的过程中我们痛苦并快乐着。


下面总结一下,我们遇到的一些比较有特点的“坑”及相应的解决方法:


坑一


因 consume offset 不能与 commitlog 同时刷盘,导致 offset 不能对应数据。


因为 consume offset 最终要索引到 commit log,假如 commit log 没有对应的数据,那么


consume queue 保存的这个 offset 也没有意义,所以最终就算有了这个 offset,还是要根据 commit log 来修复一遍,因为他们不是一起刷盘的。


所以,我们对源码进行了一定优化,将 consume offset 和 commit log 通过一个事务进行刷盘,保证每一个 consume offset 与 commit log 一一对应。


坑二


RocketMQ 的 common 包 MixAll 类中,默认指定 WS 使用 8080 端口,不能动态设置。


因为 8080 端口一般为 Web 应用使用端口,但当启动 RocketMQ 后,发现此端口被占用,导致某个 Web 应用程序不能正常启动。针对这个问题,我们在社区 Jira 中看到类似的 Issue,并提供了相应的 Bugfix 方法。所以,我们在使用过程中,基于源码进行了二次开发,并在 RocketMQ 的配置文件中增加了对此端口的动态配置项。


在使用和学习过程中,还有很多的问题,我们仍处于学习和提高的阶段。

总结

通过对 RocketMQ 的学习和使用,联想大数据在对外项目和解决方案中,不仅仅可以使用 Kafka 作为消息中间件进行数据解耦,还能够借助 RocketMQ,进一步丰富应对不同使用场景的消息解决方案。


对于 RocketMQ,联想大数据还处于认识学习的过程中,目前我们更多地是在使用它,并没有完全研究透彻。希望以后积极参与到社区的讨论和研究中,贡献自己的一份力量。


作者介绍


雷明,现就职于联想大数据团队。


本文转载自公众号阿里巴巴中间件(ID:Aliware_2018)


原文链接


https://mp.weixin.qq.com/s/z3fHgm4Aew7yz8J_mbXuuA


2019-07-02 08:003945

评论

发布
暂无评论
发现更多内容

数仓集群管理:单节点故障RTO机制分析

华为云开发者联盟

GaussDB 集群 GaussDB(DWS) RTO 单节点故障

比电脑屏保还酷?在电脑桌面实时显示当前时间。

彭宏豪95

效率 效率工具 时间 应用 桌面时钟

JDBC—配置SQLyog

打工人!

MySQL JDBC SQLyog

B2B 产品市场中「价值营销」的 8 个关键词

To B Park

编译android源码!2021年Android面试心得,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

飞桨刷新分子性质预测榜单,助力AI药物研发

百度大脑

百度 AI 飞桨

智慧物流迎利好,当代电商倒逼传统产业链变革升级

一只数据鲸鱼

物联网 数据可视化 供应链 智慧城市 智慧物流

告别交通拥堵和数据孤岛,区块链成智慧交通发展新基石

旺链科技

区块链应用 智慧交通

Linkis 1.0.0-RC1 版本发布

康月牙

算法喜刷刷之1021删除最外层的括号

Kylin

算法 28天写作 3月日更 21天挑战

BI掌柜系统开发案例详情丨BI掌柜开发源码功能

系统开发咨询1357O98O718

登顶GLUE榜单的文心又开课了,一站式教学搞懂信息抽取

百度大脑

百度大脑 GLUE 信息抽取 EasyDL

鲸品堂开篇

鲸品堂

行业资讯 通信 科技

《Out of Tar Pit》总结

陈皓07

JDBC—连接数据库工具类(JDBC_Utils)

打工人!

Java JDBC java工具类 操作数据库

php in_array的低性能

架构精进之路

php 3月日更

孤寡程序猿找女朋友的方法论

不脱发的程序猿

程序员 找对象 28天写作 3月日更 脱单

Github上2021最新最全面的面试题库(Java岗)程序员不容错过

比伯

Java 编程 程序员 架构 面试

阿里P8大牛手把手教你!这是一份面向Android开发者的复习指南,快来收藏!

欢喜学安卓

android 程序员 面试 移动开发

这可能是今年最值得入手的一本思维导图书

博文视点Broadview

有道精品课实时数据中台建设实践

有道技术团队

大数据

EGG公链——ETFalk开启了新一代去中心化社交革命

币圈那点事

京东M-PaaS平台之Android组件化系统私有化部署改造实践

京东科技开发者

系统架构 mPaaS

java String长度有限制吗?

ddww

高效使用Chrome浏览器,你可能不知道的10个技巧。

彭宏豪95

chrome 效率 浏览器 使用技巧

万象:百度的海量多媒体信息处理系统

百度开发者中心

#富媒体# #信息系统#

《Redis 核心技术与实战》学习笔记 03

escray

redis 学习 28天写作 3月日更 Redis 核心技术与实战

智汇华云 | ArcherOS Stack共享存储虚拟化技术剖析

华云数据

化蛹成蝶,华为云DevCloud助力互联网+转型,重构钢铁产业链

华为云开发者联盟

Scrum 代码 华为云 devcloud 敏捷管理

【LeetCode】翻转链表Java题解

Albert

算法 LeetCode 28天写作 3月日更

JDBC—对数据库的通用增删改查

打工人!

Java 数据库事务 MySQ JDBC crud

RocketMQ 在联想大数据中的应用简析_大数据_雷明_InfoQ精选文章