关于rocketmq:RocketMQ-写在消息拉取前

6次阅读

共计 1086 个字符,预计需要花费 3 分钟才能阅读完成。

消费者生产的时候,须要指定去生产哪个 Topic 的音讯,比方 TopicTest。

和生产者一样,消费者也须要去 NameServer 拉取 TopicTest 对应的元数据信息。

如上图所示,TopicTest 对应这两个 broker,每个 broker 都有两个 MessageQueue,那消费者从哪里拉取数据呢?

比方咱们有两个消费者,消费者在启动的时候,会向每个 broker 发送心跳包,这样每一个 broker 都有消费者的信息,咱们也能够从任意一个 broker 获取所有消费者的信息。

既然有了元数据信息,还有消费者的信息,那就能够通过调配算法,晓得以后这个消费者去哪个 MessageQueue 拉取数据。

目前 RocketMQ 默认提供 6 种调配算法,包含平均分配(AllocateMessageQueueAveragely)、均匀轮询调配(AllocateMessageQueueAveragelyByCircle)、一致性 hash(AllocateMessageQueueConsistentHash)、依据配置(AllocateMessageQueueByConfig)、依据 Broker 部署机房名(AllocateMessageQueueByMachineRoom)、就近机房模式(AllocateMachineRoomNearby)。

默认是平均分配,比方有 4 个 MessageQueue,那两个消费者各 2 个。消费者 1 调配的是 MessageQueue0 和 MessageQueue1,消费者 2 调配 MessageQueue2 和 MessageQueue3。

如果是均匀轮询调配,那消费者 1 调配 1 个,消费者 2 调配 1 个,消费者 1 再调配一个,消费者 2 再调配一个,最终消费者 1 调配的是 MessageQueue0 和 MessageQueue2,消费者 2 调配 MessageQueue1 和 MessageQueue3。

咱们接着平均分配进行往下说,以消费者 1 为例。

此时曾经晓得消费者从 MessageQueue0 和 MessageQueue1 来生产,那从哪里开始生产呢?

生产的模式又分为从队列最新偏移量开始生产(CONSUME_FROM_LAST_OFFSET)、从头开始生产(CONSUME_FROM_FIRST_OFFSET)、从消费者启动的工夫戳对应的生产进度开始生产(CONSUME_FROM_TIMESTAMP)。

依据以上的信息,咱们就能够整合一个申请信息 PullRequest,包含生产组、偏移量、MessageQueue、ProcessQueue(这个前面来解释),寄存在 pullRequestQueue 链表里。

正文完
 0