1.RocketMQ 的架构和核心组件是什么?
RocketMQ 的架构主要包括 Producer(生产者)、Broker(消息代理)、Consumer(消费者)和 NameServer(名称服务)。Producer 负责发送消息,Broker 负责存储消息并转发给 Consumer,NameServer 用于管理 Broker 和 Consumer 的元数据信息。
-
Producer(生产者):就像是一个快递的发件人,负责将包裹(消息)发送出去。举个例子,比如小明想要给小红寄一份礼物,他就是生产者,负责将礼物打包好并发送出去。
-
Broker(消息代理):就像是一个快递公司的分拣中心,负责接收快递(消息),存储并转发给收件人。在我们的例子中,快递公司的分拣中心就是 Broker,它接收从小明寄来的礼物并暂时存放起来,然后再转发给小红。
-
Consumer(消费者):就像是一个快递的收件人,负责接收并处理收到的包裹(消息)。在例子中,小红就是消费者,她接收到从小明寄来的礼物,并打开、处理这份礼物。
-
NameServer(名称服务):就像是一个快递公司的地址簿,负责记录着快递的寄件人、收件人以及包裹的信息。在例子中,地址簿就是 NameServer,它记录着快递公司的各个分拣中心的地址和联系方式,以及寄件人和收件人的信息。
2.RocketMQ 的消息发送和接收过程是怎样的?
Producer 发送消息到 Broker,Broker 存储消息并转发给 Consumer,Consumer 拉取消息并处理。整个过程包括消息的发送、存储和消费。
消息发送过程:
- Producer 发送消息:Producer 将消息发送给 Broker,包括消息的主题(Topic)、标签(Tag)和消息内容。
- NameServer 解析路由:Producer 根据消息的主题到 NameServer 查询该主题对应的 Broker 信息。
- Broker 存储消息:Broker 接收到消息后,将消息存储在对应的队列中,并等待 Consumer 拉取消息。
消息接收过程:
- Consumer 订阅消息:Consumer 在启动时向 NameServer 注册自己订阅的主题信息。
- NameServer 提供路由信息:NameServer 将订阅关系返回给 Consumer,告诉 Consumer 应该从哪些 Broker 拉取消息。
- Consumer 拉取消息:Consumer 从指定的 Broker 拉取消息,并进行消息处理,确保消息被正确消费。
3.RocketMQ 的消息如何保证可靠性?
RocketMQ 通过同步双写、刷盘等机制来保证消息的可靠性。在消息发送时,可以选择同步刷盘来确保消息被持久化到磁盘,从而避免消息丢失。
-
同步双写机制:RocketMQ 使用同步双写机制来确保消息在 Broker 存储时的可靠性。即在消息写入之前,会先将消息写入内存,然后再将消息写入磁盘,只有当磁盘写入成功后才返回写入成功的响应。
-
刷盘机制:RocketMQ 采用定时刷盘和异步刷盘相结合的方式,定时将内存中的消息数据刷写到磁盘上,以确保消息持久化。
-
主从复制机制:RocketMQ 支持主从架构,即一个 Master 节点对应多个 Slave 节点。消息首先写入 Master 节点,然后通过主从复制机制同步到各个 Slave 节点上,提高消息的可靠性和容灾能力。
-
ACK 机制:在消息发送和消费过程中,RocketMQ 使用 ACK 机制(确认机制)来确保消息的可靠传输。当消息发送者收到消息服务器的 ACK 响应后,才会认为消息发送成功;消费者处理完消息后发送 ACK 给服务器,表示消息已成功消费。
-
消息重试机制:当消息发送或消费失败时,RocketMQ 支持消息的自动重试机制。对于发送失败的消息,Producer 可以设置重试次数;对于消费失败的消息,Consumer 可以通过设置重试策略来重新消费消息。
-
消息顺序保证:RocketMQ 支持顺序消息,可以保证同一个消息队列中消息的顺序消费。这对某些业务场景下需要严格的消息顺序是非常重要的。
4.RocketMQ 如何实现消息的顺序消费?
RocketMQ 可以通过设置消息的队列和顺序消费监听器来实现顺序消费。确保相同业务的消息发送到同一个队列中,同时设置 Consumer 的消费模式为顺序消费。
5.RocketMQ 的消息重试机制是怎样的?
RocketMQ 在消息发送失败时会进行消息重试,默认情况下会重试16次。可以通过配置参数来调整消息重试的次数和间隔。
RocketMQ 的消息过滤如何实现?
RocketMQ 支持根据 SQL 表达式或者 Tag 来过滤消息。Producer 在发送消息时可以添加 Tag,Consumer 在订阅消息时可以指定 Tag 来过滤消息。
6.RocketMQ 的集群模式有哪些?
RocketMQ 主要有单 Master 模式、多 Master 模式和多 Master 多 Slave 模式。单 Master 模式适用于小规模部署,多 Master 模式适用于中等规模部署,多 Master 多 Slave 模式适用于大规模部署。
待完善~~~