上一篇地址:整理好了!2024年最常见 20 道 Rocket MQ面试题(三)-CSDN博客
七、RocketMQ消费模式有几种?
RocketMQ 提供了两种主要的消费模式,分别是:
-
集群消费模式(Clustering):在这种模式下,同一Topic下的消息被分发到同一个ConsumerGroup中的不同实例进行消费,但任意一条消息只会被该组中的一个消费者实例消费。这种方式可以提高消费的并发性,适用于大多数消息业务场景。
-
广播消费模式(Broadcasting):在广播消费模式中,同一Topic下的消息会被发送给同一个ConsumerGroup中的所有消费者实例,每个实例都会独立消费所有的消息。这种模式适用于需要将消息分发到多个消费者进行处理的场景,例如日志收集等。
这两种消费模式的选择取决于具体的业务需求和场景。集群消费模式可以有效地提高消息处理的效率和吞吐量,而广播消费模式则可以确保消息被多个消费者实例独立处理。
八、RocketMQ消费消息是push还是pull?
RocketMQ 支持两种消息消费方式:Push(推模式)和 Pull(拉模式)。不过,RocketMQ 主要采用的是 Push 模式,但也提供了 Pull 模式的实现。
Push 模式(推模式)
Push 模式是 RocketMQ 默认的消费方式。在这种模式下,Broker 会主动将消息推送给消费者。这种方式的好处是消费者不需要主动去查询消息,从而简化了消费逻辑,并且可以减少消费者的资源消耗。Push 模式适用于大多数场景,特别是当消费者处理能力有限,或者希望简化消费逻辑时。
RocketMQ 的 Push 模式实际上是一种伪 Push 模式,它底层是基于 Pull 模式实现的,但对外表现出 Push 的特性。RocketMQ 使用长轮询机制来实现这种伪 Push 模式,具体流程如下:
- 消费者发送拉取请求到 Broker。
- 如果 Broker 上没有消息,消费者的请求会被挂起,直到有新消息到达。
- 一旦有新消息到达,Broker 会唤醒挂起的请求,并返回消息给消费者。
Pull 模式(拉模式)
Pull 模式是另一种消费方式,消费者需要主动去 Broker 查询并拉取消息。这种方式的优点是消费者可以根据自身的消费能力来控制拉取消息的频率和数量,从而更好地管理资源和避免过度消费。Pull 模式适用于消费者需要精细控制消息消费速率的场景。
在 RocketMQ 中,Pull 模式的实现涉及到以下步骤:
- 消费者调用 PullKernelImpl 发送拉取请求,并指定 Broker 挂起的最长时间。
- Broker 中的 PullMessageProcess 处理拉取请求,从 ConsumeQueue 中查询消息。
- 如果没有查询到消息,并且启用了长轮询,请求会被挂起,直到有新数据时再返回给消费者。
- 一旦有新消息,Broker 会唤醒挂起的拉取请求,并将消息返回给消费者。
总结来说,RocketMQ 主要采用的是 Push 模式,但也提供了 Pull 模式的实现,用户可以根据自己的需求选择合适的消费方式。