刚刚过去的双十一,阿里自主研发的消息中间件RocketMQ,充分展现了它的低延迟特性,大部分消息请求落在2ms内,慢请求也都落在20ms内,这无疑给追求快速响应的在线交易系统(OLTP)带去了福音。
也是在今年11月份,RocketMQ进入Apache孵化。这款最初设计来为淘宝交易系统异步解耦、削峰填谷的消息中间件,开始走出国门,为世界上的用户提供服务。自然地,RocketMQ将来不仅仅只服务于在线系统,对于离线或半离线系统,尤其是大数据领域,RocketMQ也将为其绽放自己的光彩。

Kafka大数据的杀手锏

谈到大数据领域内的消息传输,则绕不开Kafka。这款为大数据而生的消息中间件,以其百万级TPS的吞吐量名声大噪,迅速成为大数据领域的宠儿,在数据采集、传输、存储的过程中发挥着举足轻重的作用,被LinkedIn,Uber, Twitter, Netflix等大公司所采纳,而storm,spark,flink等大数据流处理或批处理平台都有Kafka的相关插件支持。
那么,Kafka的百万级TPS是如何做到的呢?
有很多相关的分析,比如异步IO,PageCache,异步刷盘,消费过程零拷贝,Batch等,这些都对,但是没有一个直观的说明,这众多因素中,哪一个才是杀手锏呢?
笔者对这个问题进行了一些探究,在揭晓之前,请看下图:

注:一台物理机部署Kafka,另一台物理机施加压力,每个producer异步发送,异步统计结果;本文所涉及的机器配置都是24核48G内存SSD盘

从上图可以看出,当单个消息体为50字节时,kafka单机的吞吐量确实表现出色,能达到百万级。可是当单个消息体为5k字节时,TPS极速下降,只有大约3万多,少了两个数量级。
对此,可能有人会说那是因为网卡打满了,还有就是因为消息体变大,每次能batch的数量变少了,导致整体TPS下降。
都有可能,笔者测试时网卡虽然没有打满,却确实是负载比较高了。因此,为了排除因素,笔者还做了另外一个测试如下:

上图可以清晰地看出,50字节时,Kafka no batch(batch size设为1)时的吞吐量只有15万多,只有启用batch时的十分之一,而RocketMQ也可以很轻松地达到这个水平。
至此,可以直观地充分说明,Kafka达到百万级TPS的杀手锏就是batch !
batch, 简单说就是把多个消息打包一次性发过去,对于在线交易系统来说,这通常不是一个好的选择,会导致消息大量丢失或者大量重复,延迟也会加大。但对于大数据领域来说,由于大部分都是离线半离线的计算,对数据可靠性要求没有那么高,但追求高吞吐量。Kafka为适应大数据,选择了batch,因此,赢得了大数据的欢迎。

RocketMQ大数据的无限潜力

到这里,自然会有一个疑问,如果把batch特性用到RocketMQ中,效果会如何呢?
按照上面的结论进行推测,batch特性势必也能大大提高RocketMQ的吞吐量。但如果要实践证明,需要做一些工作。
为了直观地证明batch对于RocketMQ的功效,笔者在Kafka Broker做了一层代理,大致结构图如下:

Kafka Broker收到Kafka Client的Batch Data后,不存储在本地,而是把消息转发到RocketMQ,等待RocketMQ返回结果后,再返回给Kafka Client。
笔者用一台物理机部署Kafka Broker作为Proxy,同时用另一台同样配置的物理机部署RocketMQ作为存储,然后用另一台物理机来对Proxy进行施加压力,结果如下图:

这个结果与上面关于Kafka的结果相互印证,既证明了Kakfa大数据的杀手锏在于batch,同时也展现了RocketMQ在大数据领域的无限潜力,并不逊色于Kafka。

Proxy与RocketMQ Kernel

RocketMQ最初是为交易系统而生,现在也不会忘记这一初心,但其也绝不会固步自封。面对越来越多的来自各个领域的用户,他们有着各自不一样的复杂应用场景,这给RocketMQ带来了挑战,也带来了机遇。未来的RocketMQ会继续保持初心,维护自己Kernel的本色,但也会增加一些外围功能,以适应各种不同的场景,如面向大数据的Kakfa Proxy,面向物联网的MQTT,面向REST的Http Proxy。

最后,这一切只是开始,更多的想象空间,需要大家一起来创造。

消息中间件学习总结(6)——RocketMQ之RocketMQ大数据畅想相关推荐

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

    http://casaveneziausa.com/lenovo-logo/ 众所周知,RocketMQ 作为一款分布式.队列模型的消息中间件,具有以下特点: 严格保证的消息顺序 丰富的消息拉取模式 ...

  2. 学python对数学要求高吗_人工智能的小男孩 大专学历的人没有数学基础想学习python技术未来能往大数据或人工智能方向进行职业发展吗?...

    内容由传智播客提供,电器吧机器人网提供人工智能的小男孩相关内容,小编烟酉为您整理并发布于人工智能栏目下,原标题:大专学历的人没有数学基础想学习python技术未来能往大数据或人工智能方向进行职业发展吗 ...

  3. 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践

    摘要:为了更好地让开发者们更加深入了解阿里开源,阿里云云栖社区在3月1号了举办"阿里开源项目最佳实践"在线技术峰会,直播讲述了当前阿里新兴和经典开源项目实战经验以及背后的开发思路. ...

  4. 消息中间件学习总结(3)——RocketMQ之十分钟入门RocketMQ

    本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能.高吞吐量的分布式消息中间件否可以解决,规范中如何定义这些问题.然后 ...

  5. 消息中间件学习总结(1)——RocketMQ之专访RocketMQ联合创始人:项目思路、技术细节和未来规划

    编者按 这些年开源氛围越来越好,各大IT公司都纷纷将一些自研代码开源出来.2012年,阿里巴巴开源其自研的第三代分布式消息中间件--RocketMQ.经过几年的技术打磨,阿里称基于RocketMQ技术 ...

  6. [转载] 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事

    参考链接: 捐赠 序言 今年的双十一对阿里巴巴中间件消息团队来说,注定是个不平凡的日子.在这一天,稳定性小组重点攻克的低延迟存储解决方案成功地经受住了大考.整个大促期间,99.996%的延迟落在了10 ...

  7. 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事

    序言 今年的双十一对阿里巴巴中间件消息团队来说,注定是个不平凡的日子.在这一天,稳定性小组重点攻克的低延迟存储解决方案成功地经受住了大考.整个大促期间,99.996%的延迟落在了10ms以内,极个别由 ...

  8. 消息中间件学习总结(7)——RocketMQ之万亿级数据洪峰下的分布式消息引擎

    前言 通过简单回顾阿里中间件(Aliware)消息引擎的发展史,本文开篇于双11消息引擎面临的低延迟挑战,通过经典的应用场景阐述可能会面临的问题 - 响应慢,雪崩,用户体验差,继而交易下跌.为了应对这 ...

  9. RocketMQ大数据畅想

    刚刚过去的双十一,阿里自主研发的消息中间件RocketMQ,充分展现了它的低延迟特性,大部分消息请求落在2ms内,慢请求也都落在20ms内,这无疑给追求快速响应的在线交易系统(OLTP)带去了福音. ...

最新文章

  1. js取一定范围内的随机整数
  2. 逻辑模型设计步骤-确定数据分割策略
  3. 3.对角线遍历(LeetCode第498题)
  4. sql server 之函数小技巧 整数类型为空是用空字符串替代实现
  5. leetcode 102 C++AC
  6. monkey 环境搭建
  7. java提示需要标识符,java错误需要标识符
  8. 机器学习系列-AdaBoost
  9. Arcgis Server开发使用query报错
  10. python变量定义 关键字_(四)Robot Framework 基础关键字
  11. sscanf函数详解
  12. android组件化数据生命周期,Android组件化开发实践(七):开发常见问题及解决方案...
  13. 30分钟一部动画短片!从MMD入门3D世界,边玩边学的3D教程!(一)“MMD快速入门教程CSDN”
  14. ImportREC输入表重建工具
  15. To_Heart—题解——POI2012 Rendezvous
  16. 今日头条前端面试总结
  17. Spec2Vec快速入门
  18. 逻辑与计算机设计基础实验报告,逻辑与计算机设计基础--课实验的报告.doc
  19. ORA-3136错误解决
  20. docker部署内网dns解析服务(coredns方案)

热门文章

  1. 计算机科技英语论文,计算机科技英语论文.doc
  2. test函数java,js中test()函数在正则中使用
  3. python filter过滤器的使用_Python filter过滤器原理及实例应用
  4. python一般的类有三部分组成_Python学习笔记总结(三)类
  5. python上下文管理协议_Python3基础-上下文管理协议
  6. sqlite+php+函数大全,Sqlite 常用函数 推荐
  7. java 反射 systemproperties,Android添加自己的系统属性(反射调用SystemProperties)
  8. android执行lua脚本的方法,从Android应用程序调用Lua脚本
  9. 不是单组分组函数_面向对象编程是否已淘汰?函数式编程的枪口瞄错了对象
  10. 可以编写html的文件吗,我可以使用HTML5/JS编写文件吗?