- rocketmq的注册中心是基于NameService的,而kafka的注册中心是基于zk的
- NameService没有zk的功能丰富,从组件上来说它更轻量级
- NameService没有监听机制,它通过心跳来维护自己与broker之间的联系
- Zk的实现是通过一个持久节点locker节点来创建临时节点znode,并且zk的特性是是强一致性的,生成的znode是有序自增的
- Zk通过创建监听比自己小的节点,和惊群效应实现
- NameService存储的是topic和broker的映射关系,数据存储不复杂
- Kafka在数据可靠性上不如rocketmq
- Kafka支持异步刷盘和异步复制,rocketmq支持同步异步刷盘、同步异步复制
- 数据传输量上kafka优于rocketmq
- Kafka的数据传输是百万级别的,单点的rocketmq的传输速率是7万左右的水平
- Kafka数据传输效率高的一个特点是基于磁盘顺序写
- 第二个特点kafka在发送消息到broker时,是基于一个批量发送的理念(巧妙的利用了磁盘I/O的原理,减少磁盘IO次数,提高效率)。这样的好处是一次发送的量大
- 坏处是增大了消息丢失的风险,并且在发送前会堆积大量的缓存,容易对gc造成压力
- Kafka和rocketmq都是运用了零拷贝的原理(Zero Copy)。主要是通过SendFIle的形式实现(简单的概述就是传输文件)。与传统传输相比,减少了从内核缓冲区到用户缓冲区,以及用户缓冲区到socket缓冲区的两个过程
- 传统IO 硬盘-》内核缓冲区-》用户缓冲区-》socket缓冲区
- sendFile 硬盘-》内核缓冲区-》socket缓冲区
- 两者消息重投机制不同
- Kafka不支持消息失败重投
- Rocketmq支持消息的失败重投
- 所以rocketmq在消息的可靠性上更高
来源:oschina
链接:https://my.oschina.net/u/3869202/blog/4307824