kafka和RocketMQ的区别

今天面试字节被问到的问题,当时没有回答好,现在再重新梳理一下

两者都是消息系统,但是kafka已经升级为了流处理平台

RocketMQ的出现是因为kafka不支持在交易、订单、充值等场景下许多特性,于是阿里编写了rocketMQ,定位于非日志的可靠消息传输;而kafka诞生的时候定位是日志传输。

数据可靠性

RMQ支持异步实时刷盘、同步刷盘、同步Replication、异步Replication
同步刷盘在单机上可靠性比kafka高,不会因为操作系统crash,倒是数据丢失
kafka使用异步刷盘、异步Replication
因为异步,主从切换后存在数据丢失,以及数据不一致的情况

性能对比

 kafka单机写入tps在百万/s,消息大小10字节
 RMQ单机7万/s,单机部署3个Broker,可以跑到12w/S,消息10字节
 原因是kafka的Producer支持多个小消息合并,批量发向Broker;
 这也是kafka适合OLAP的原因,实时性不高

 RMQ不这么做的原因
	1:Producer通常使用java,缓存过多消息容易GC
	2:Producer调用发送消息接口
	3:Producer通常为分布式系统,且每台机器都是多线程发送,团队认为线上的系统单个Producer每秒产生的数量有限,不可能上万
	4:缓存功能可以有上层业务实现

单机支持的队列数

kafka单机超过64个队列、分区。Load会发生明显飚高,队列越多,load越高,发送时间变长
RMQ支持5万个队列,load不发生明显变化
kafka一个Topic一个文件,RMQ总共一个文件。

队列多的好处

- 单机可以创建更多Topic
- 消费者的集群规模和队列书成正比,队列越多Consumer集群可以越大

消息投递实时性

Kafka使用短轮询,实时性取决于轮询时间
RMQ使用长轮询,同Push的方式实时性一致,一般几个毫秒

失败重试

kakfa不支持重试
RMQ支持定时重试,每次重试时间顺延

严格的消息顺序

kafka支持消息顺序,但是一台宕机,会产生消息混乱
RMQ支持严格的消息顺序,Broker宕机,发送消息会失败,不会乱序

定时消息,kafka不支持

分布式事务消息

kafka不支持、开源版本不支持

消息回溯

kafka可以按照offset来回溯
RMQ可以按照时间回溯精度毫秒,有助重放

消息并行度

kafka并行度依赖Topic分区数,与其一致
RMQ分两种
	顺序消费方式同kafka一样
	乱序方式取决Consumer的线程数。

消息堆积能力。kafka更强。RMQ支持亿级

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章