rocketmq和kafka的对比

四个点可以说

从架构上来说

rocketmq是 nameserver broker

Nameserver互相数据不互通通过心跳监听broker,保存的是所有的broker的信息。

kafka是 zookeeper和broker

从存储结构上来说

rokcetmq是一个topic共享一个log文件

而kafka是一个topic下分区,分区又分为segment 每个segment会包含一个log数据文件和一个索引文件。

从生产者来说

  • kafka默认使用异步发送的形式,有一个memory buffer暂存消息,同时会将多个消息整合成一个数据包发送,这样能提高吞吐量,但对消息的实效有些影响;
  • RocketMQ可选择使用同步或者异步发送。

从消费者来说

数据可靠性

RocketMQ新增了同步刷盘机制,保证了可靠性;一个RocketMQ实例只有一个partition, replication时性能更好。

性能对比

发送消息的Producer通常是用Java语言,缓存过多消息,GC是个很严重的问题。(问题:难道kafka用scala不需要GC?)

Producer发送消息到broker, 若消息发送出去后,未达到broker,就通知业务消息发送成功,若此时Broker宕机,则会导致消息丢失,从而导致业务出错。

Producer通常为分布式系统,且每台机器都是多线程发送,通常来说线上单Producer产生的消息数量不会过万。

消息合并功能完全可由上层业务来做

————————————————

一句话概括:RocketMQ写入性能上不如kafka, 主要因为kafka主要应用于日志场景,而RocketMQ应用于业务场景,为了保证消息必达牺牲了性能,且基于线上真实场景没有在RocketMQ层做消息合并,推荐在业务层自己做。

单机支持的队列数

RocketMQ支持的队列数远高于kafka支持的partition数,这样RocketMQ可以支持更多的consumer集群。

—————————————————

kafka相比RocketMQ的优势

1、单机吞吐量TPS可上百万,远高于RocketMQTPS7万每秒,适用于日志类消息。
2kafka支持多语言的客户端

RocketMQ相比kafka的优势

**1、保证消息不丢( 数据可靠性达10个9)

2、可严格保证消息有序

3、支持分布式事务消息

4、支持按时间做消息回溯(可精确到毫秒级)

5、支持按标识和内容查询消息,用于排查丢消息

6、支持消费失败重试

7、可支持更多的partition, 即更多的消费线程数

————————————————

TopicTag的区别?

  • 无直接关联的消息:淘宝交易消息,京东物流消息使用不同的 Topic 进行区分。
  • 交易消息,电器类订单、女装类订单、化妆品类订单的消息可以用Tag进行区分。