文章目录
- 一. 源起
- 二. 架构之间的区别
- 三. 设计理念区别
- 四. kafka的isr机制 (In-Sync Replicas 同步副本集合)
- 五. rocketmq的主从机制
- 六. rocketmq的Dledger机制
- isr,主从,dledger机制对比总结
一. 源起
大家都知道mq在消息防丢方面的,都是分成生产者同步发送,消费者ack以及broker在多个分片持久化完成。但是作为消息中间件的kafka和rocketmq的实现的具体过程是不同。(虽然整体都是master副本在等到slave副本持久化成功之后 再给生成者ack)。 下面从的架构设计和设计理念分析,各自具体的实现流程。
二. 架构之间的区别
1. kafka架构

注意 kafka的副本是partion级别, 由一个leader partion和多个follower partion组成。
2. rocketmq架构

注意 rocketmq的master和slave都是broker级别的。
三. 设计理念区别
Kafka 是流平台:1. 核心抽象是分区日志流。消息(在Kafka里更常被称为“记录”)一旦被写入分区,其位置(偏移量)就是不可变的、有序的。2. 语义是“流处理”:消费者通过管理偏移量来跟踪处理进度。如果某条记录处理失败,标准的做法不是跳过它,而是停止前进,直到问题解决。因为跳过一条记录意味着数据流出现了缺口,会导致后续的状态计算(如聚合、连接)全部出错。保证数据的完整性和顺序性是流处理的生命线。RocketMQ/ActiveMQ/RabbitMQ 是消息中间件:1. 核心抽象是队列或主题。设计目标是为独立的、离散的“消息”提供可靠传递。2. 语义是“消息处理”:每条消息通常是独立的。一条消息的处理失败不应阻塞其他消息的处理。因此,将“坏消息”移走(到DLQ)以保持主流程畅通是一个非常合理的模式。
四. kafka的isr机制 (In-Sync Replicas 同步副本集合)

4.1 实现流程
1. 生产消息阶段: 生产者发送消息到leader副本。这里可以配置acks控制写入策略。 这里以acks =-1要等全部说明。
2. leader写入与follower复制:leader副本将数据写入本地log. follower副本异步的从leader副本复制数据。
3. 在所有的follower都完成数据复制的情况下,leader返回给生产者发送ack确认
acks选项 | 含义 | 适用场景 |
---|
0 | 不需要等任何确认 | 非关键的业务活动日志, 实时监控表盘数据 |
1 | leader写入数据 直接响应ack | 业务日志, 业务通知类允许特别场景少量丢失热的业务 |
-1 | 全部follower副本都完成数据复制,再响应ack | 金融交易、订单、支付、转账 |
4.2 动态isr
五. rocketmq的主从机制
六. rocketmq的Dledger机制
isr,主从,dledger机制对比总结