rocketmq和kafka的区别

176 阅读2分钟

架构层面

rocket mq和 Kafka 相比,RocketMQ 在架构上做了减法,在功能上做了加法。

  • kafka架构

rocketmq和kafka架构.png

架构减法

  • 简化备份模型

  • Kafka 会将 partiton 分散到多个 broker 中,并为 partiton 配置副本,将 partiton 分为 leader和 follower,也就是主和从。broker 中既可能有 A topic 的主 partiton,也可能有 B topic 的从 partiton。 主从 partiton 之间会建立数据同步,本质上就是同步 partiton 底下的 segment 文件数据

  • RocketMQ 将 broker 上的所有 topic 数据到写到 CommitLog 上。如果还像 Kafka 那样给每个分区单独建立同步通信,就还得将 CommitLog 里的内容拆开,这就还是退化为随机读了。
    于是 RocketMQ 索性以 broker 为单位区分主从,主从之间同步 CommitLog 文件,保持高可用的同时,也大大简化了备份模型。

  • 轻量化协调中间件 nameserver 和 zk

  • nameserver和ZK 信息存储

  • nameserver和ZK 都存储了集群的信息包含 1、broker的注册信息
    2、topic的队列/分区 信息
    3、消费者组信息(组成员、消费者偏好和消费者对offset的提交)

功能加法

  • 消息过滤 支持tag
  • 支持事务消息
  • 支持延迟队列
  • 支持重试16次后进入死信队列
  • 支持按照时间维度、offset 回溯消息,kafka只支持按照offset回溯

总结

  • • RocketMQ 和 kafka 相比,在架构上做了减法,在功能上做了加法
  • • 跟 kafka 的架构相比,RocketMQ 简化了协调节点和分区以及备份模型。同时增强了消息过滤、消息回溯和事务能力,加入了延迟队列,死信队列等新特性。
  • • 凡事皆有代价,RocketMQ 牺牲了一部分性能,换取了比 kafka 更强大的功能特性。