RocketMQ 的架构中有哪些核心组件?消息从发到收的完整流转过程是怎样的?
核心组件
- 消费队列:CommitQueue,主要存储消息的偏移量和索引
- NameServer
- Broker
- Producer
- Consumer
流转过程
Producer——>选择topic的一个messagequeue->broker->写入CommitLog,异步更新CommitQueue,异步构建索引(可选)->Consumer->集群消费/广播消费
RocketMQ 怎么保证消息不丢失(消息可靠性)?从生产端 → Broker → 消费端三个阶段分别怎么保证?
生产端
- 同步发送——等待broker确认
- 重试机制——默认三次重试
- 事务机制——半消息+回查机制
Broker端
- 同步刷盘——CommitLog写入磁盘后返回ack
- 主从同步——Master同步复制到slave
消费端
- 消费完成再ack——业务逻辑处理成功后,才向 Broker 发送 CONSUME_SUCCESS
- 关闭自动ack
Kafka 的 ISR(In-Sync Replicas)是什么?leader 挂了之后怎么选新的 leader?
ISR——所有与leader保持同步的副本的集合
Kafka 的 Leader 选举由 Controller(控制器)负责:
1. Controller 是第一个启动的 Broker,通过 ZooKeeper 竞选
2. 当 Leader 挂了,Controller 从 ISR 中选择一个 Follower 作为新 leader
3. 优先选 ISR 中存活的副本,如果没有 ISR 成员存活则走 unclean leader election
消息队列中,如何保证消息的顺序消费**?Kafka 和 RocketMQ 分别怎么做?
rocketmq:把同一业务标识的消息,全部发送到同一个 MessageQueue.同一个 MessageQueue 同一时刻只分配给一个消费线程,串行逐条消费
kafka:Kafka 会对 key 做 hash 取模,相同 key 的消息会固定进入同一个 Partition.单线程消费该分区消息,逐条同步处理,处理完成再拉取下一条,禁止并发消费同一分区消息
原创
mq难点(顺序消费、消息可靠性,节点选举)
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法