架构层面
rocket mq和 Kafka 相比,RocketMQ 在架构上做了减法,在功能上做了加法。
- kafka架构
架构减法
-
简化备份模型
-
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 更强大的功能特性。