Rocket MQ存储与Kafka存储对比分析

kafka单机超过64个队列/分区,load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长。kafka分区数无法过多的问题,rocketmq单机支持最高5万个队列,负载不会发生明显变化。
本文简单分析一下产生这种问题的原因及因此产生的其他问题。
rocket mq的存储结构
rocketmq的存储结构如下:
rocketmq在同一个broker上, 所有topic(及topic的queue)的数据都存储在同一个文件中(commitlog),对每个queue有独立的文件(consumequeue)记录queue相关的数据在commit中的位置,一般consumequeue都可在内存中缓存。
kafka的存储结构
kafka的存储结构如下:
kafka的存储是每个机器上topic的partition(rocketmq中的queue)的数据独立存储:每个partition对应自己的数据文件。
差异对比
1. 性能差异
这种存储上的差别导致如果单台机器上的partition(queue)数量太多, 对rocketmq来讲, 数据存储的io可以合并并写到同一个文件, 因此性能不会下降太多。 但对kafka,随着partition的增多, 会发生多个文件同时io的情况, 如果这些文件在同一个磁盘上, 就会引起io写竞争, 因此性能会大幅下降。可通过将partition分散在不同磁盘环境这种竞争。
一般一个broker会由多个topic共享, 因此这种差异可作为选择消息系统的一个重要参考。
2. 同构系统和异构系统的区别
同构系统和异构系统的区别如下:
同构系统:
主从机器上的内容完全一样
主从间数据复制的效率高
异构系统:
异构系统各个机器上的内容不同
充分利用各个机器的资源, 每台机器都可作为写机器(目前绝大多数系统都是仅主可写)从rocketmq和kafka的架构上可知, rocketmq是同构系统, kafka是异构系统, rocketmq不可能是异步系统, 因为对同一个queue, 其offset在主从上需要保持一致。3. topic设置差别因为rocketmq的数据在同一个文件, 因此设置只能是broker维度的设置, 不能精细到topic级别, 比如: 数据存储时间, 刷盘策略, 主从同步策略等。
kafka支持topic级别的设定,灵活性上kafka更好。
其他
mq使用
在应用中, 如果能使用mq的场景个人比较倾向于使用mq, 因为本身引入mq的技术和运维成本并不高,并能解决可靠性和数据分布式问题。
2. mq的选择
主要根据业务场景, 但如果业务场景没有明显特点, 个人倾向选择rocketmq, 主要两点理由:
rocketmq的功能更丰富: 延迟队列, 基于key的消息查询, 事务,tag过滤等。
rocketmq的客户端更友好: 提供了基于process queue的方式处理了多线程问题(这里碰到很多实现误区是自实现多线程, 处理不好容易丢失数据)。
当然kafka也有其自身优势, 比如客户端支持更丰富, 社区更成熟, 流处理支持更好等。


无线射频识别技术(RFID)应用的关键问题在哪里?
3D打印技术正在深刻地推动着供应链的转型升级
苹果2022年的iPhone可能采用潜望镜式长焦摄镜头
中间继电器如何进行型号选型
智能镜子显示屏将如何增强家居互动体验
Rocket MQ存储与Kafka存储对比分析
什么牌子的液晶电视好?
小米11 Lite获得FCC认证,采用LCD全面屏
俄罗斯起草了一份关于5G网络发展的新战略文件
一款“不一样”的保险丝,它颠覆了我们对于传统保险丝的认知
什么是稳定币,稳定币的稳定性究竟如何?
中铁大桥局福清兴化湾海上风电场一期项目完成
大连“硅酸盐荧光粉”专利突破国际封锁
超软LCD曲率半径可达3mm 可突破使用寿命限制
数字串扰在数据转换器中的作用:数字数据信号串扰对时钟的影响
小米IPO获得超过10倍的港股散户认购
气体检测仪在选购过程中有哪些事项需要注意
格力手机价比天高 董小姐心比天高 奈何卖得难如上青天
基于单片机旋转时钟的总体设计及方案
展望2030:机器人制造的全面崛起?