RocketMQ 的架构中有哪些核心组件?消息从发到收的完整流转过程是怎样的?

核心组件

  1. 消费队列:CommitQueue,主要存储消息的偏移量和索引
  2. NameServer
  3. Broker
  4. Producer
  5. Consumer

流转过程

Producer——>选择topic的一个messagequeue->broker->写入CommitLog,异步更新CommitQueue,异步构建索引(可选)->Consumer->集群消费/广播消费

RocketMQ 怎么保证消息不丢失(消息可靠性)?从生产端 → Broker → 消费端三个阶段分别怎么保证?

生产端

  1. 同步发送——等待broker确认
  2. 重试机制——默认三次重试
  3. 事务机制——半消息+回查机制

Broker端

  1. 同步刷盘——CommitLog写入磁盘后返回ack
  2. 主从同步——Master同步复制到slave

消费端

  1. 消费完成再ack——业务逻辑处理成功后,才向 Broker 发送 CONSUME_SUCCESS
  2. 关闭自动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.单线程消费该分区消息,逐条同步处理,处理完成再拉取下一条,禁止并发消费同一分区消息