@@ -306,21 +306,81 @@ memo:2025 年 11 月 15 日修改至此,今天有球友发喜报说携程开
306306
307307### 6.消息的消费模式了解吗?
308308
309- 消息消费模式有两种: ** Clustering ** (集群消费)和 ** Broadcasting ** (广播消费) 。
309+ 我认为消费模式可以从两个维度来分类:一个是消费的方向,一个是消费的范围 。
310310
311- ![ 两种消费模式 ] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-mianznxrocketmqessw-2c574635-1eaa-4bdd-8aa8-1bdc3f10b274.jpg )
311+ 从消费方向来分的话,有两种模式,一种是 pull 模式,一种是 push 模式。
312312
313- 默认情况下就是集群消费,这种模式下 ` 一个消费者组共同消费一个主题的多个队列,一个队列只会被一个消费者消费 ` ,如果某个消费者挂掉,分组内其它消费者会接替挂掉的消费者继续消费。
313+ ![ 二哥的 Java 进阶之路:pull 和 push 的消费模式 ] ( https://cdn.tobebetterjavaer.com/stutymore/rocketmq-20251125101659.png )
314314
315- 而广播消费消息会发给消费者组中的每一个消费者进行消费 。
315+ pull 模式需要消费者主动去消息队列中拉取消息,消费者可以控制拉取的速度、数量,但需要不断地轮询,比较浪费资源 。
316316
317- ### 7.RoctetMQ 基本架构了解吗?
317+ push 模式则是消息队列主动把消息推送给消费者,消费者只需要注册一个监听器,消息一到达就触发回调进行处理,响应速度快,但可能会出现消息堆积的情况。
318318
319- 先看图,RocketMQ 的基本架构:
319+ 从消费范围来分的话,也有两种模式,一种是集群消费,一种是广播消费。
320320
321- ![ RocketMQ架构] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-mianznxrocketmqessw-d4c0e036-0f0e-466f-bd4b-7e6ee10daca4.jpg )
321+ ![ 三分恶面渣逆袭:集群消费和广播消费] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-mianznxrocketmqessw-2c574635-1eaa-4bdd-8aa8-1bdc3f10b274.jpg )
322+
323+ 集群消费是指,同一个消费者组中的多个消费者共同消费一个主题中的消息。消息被分散分配给这个消费者组中的各个消费者,每条消息只被这个消费者组中的一个消费者消费。
324+
325+ 换句话说,RocketMQ 会把主题下的所有队列均匀地分配给消费者组内的消费者,实现负载均衡。这样也能保证同一条消息只会被消费者组内的一个消费者消费,避免重复消费。
326+
327+ ```
328+ Topic: order_topic
329+ ├─ Queue 0 → [消息1] [消息3] [消息5]
330+ ├─ Queue 1 → [消息2] [消息4] [消息6]
331+ ├─ Queue 2 → [消息7] [消息9] [消息11]
332+ └─ Queue 3 → [消息8] [消息10] [消息12]
333+
334+ ConsumerGroup: order_consumer_group
335+ ├─ Consumer 1 消费 Queue 0, 1
336+ ├─ Consumer 2 消费 Queue 2, 3
337+
338+ 同一条消息只被 Consumer 1 或 Consumer 2 之一消费,不会重复消费。
339+ ```
340+
341+ 广播消费是指,同一个主题的每条消息都会被消费者组内的每个消费者消费一次。也就是说,消费者组内的每个消费者都会收到主题下的所有消息,从而实现消息的广播效果。
342+
343+ ```
344+ Topic: config_update_topic
345+ └─ [配置更新消息1] [配置更新消息2] [配置更新消息3]
346+
347+ ConsumerGroup: config_consumer_group
348+ ├─ Consumer 1(服务器1上的应用)
349+ │ └─ 收到:消息1, 消息2, 消息3(完整的)
350+ │
351+ ├─ Consumer 2(服务器2上的应用)
352+ │ └─ 收到:消息1, 消息2, 消息3(完整的)
353+ │
354+ └─ Consumer 3(服务器3上的应用)
355+ └─ 收到:消息1, 消息2, 消息3(完整的)
356+
357+ 三个消费者都收到了所有的消息,各自独立处理。
358+ ```
359+
360+ ### 7.RocketMQ 的基本架构了解吗?
361+
362+ RocketMQ 的架构由四个核心部分组成:NameServer、Broker、生产者和消费者。
363+
364+ ![ 三分恶面渣逆袭:RocketMQ架构] ( https://cdn.tobebetterjavaer.com/tobebetterjavaer/images/nice-article/weixin-mianznxrocketmqessw-d4c0e036-0f0e-466f-bd4b-7e6ee10daca4.jpg )
365+
366+ 我的理解是,NameServer 就是 RocketMQ 的路由中心,负责维护 Topic 和 Broker 之间的路由信息。生产者在发送消息前,消费者在消费消息前,都会先从 NameServer 获取最新的路由信息。
367+
368+ - 每个 Broker 会向 NameServer 注册自己的信息,包括 Broker 的地址、端口、存储的 Topic 和 Queue 等。
369+ - NameServer 会根据 Topic 名称告诉生产者和消费者对应的 Broker 地址。
370+ - Broker 会定期向 NameServer 发送心跳,报告自己的状态。
371+
372+ ![ 帅旋:RocketMQ运行原理] ( https://cdn.tobebetterjavaer.com/stutymore/rocketmq-20251125103932.png )
373+
374+ Broker 是消息存储中心,它的职责包括:
375+
376+ - 所有生产者发送的消息都会被存储在 Broker 上,以文件的形式持久化到磁盘。
377+ - 消费者从 Broker 拉取消息时,Broker 需要根据消费者的 Offset 找到对应的消息,返回给消费者。
378+ - 如果配置了高可用,Broker Master 会把消息同步到 Broker Slave,实现主从备份。
379+
380+ 生产者在发送消息时,会先从 NameServer 获取 Topic 的路由信息,然后根据路由信息把消息发送到对应的 Broker 上。
381+
382+ 消费者在消费消息时,也会先从 NameServer 获取 Topic 的路由信息,然后根据路由信息从对应的 Broker 上拉取消息进行处理。
322383
323- RocketMQ 一共有四个部分组成:NameServer,Broker,Producer 生产者,Consumer 消费者,它们对应了:发现、发、存、收,为了保证高可用,一般每一部分都是集群部署的。
324384
325385### 8.那能介绍一下这四部分吗?
326386
0 commit comments