rocketmq队列和消费者关系

同一个 topic,同一个 consumer group

只开一个消费者

这里是一个消费者终端可以监听四个队列的消息嘛?

在这里插入图片描述

开两个消费者

这里是两个消费者终端,一人监听两个队列的消息?

在这里插入图片描述

开三个消费者

在这里插入图片描述

开四个消费者

连续发四个消息,有三个消息是被同一个消费者消费。

在这里插入图片描述

开五个消费者

为什么是 @860 那台消费者被挤掉了?
连续发八个消息,之前的那台确实收不到消息了。

在这里插入图片描述

问题

  1. 一个 topic 配置了四个队列的话,那一个 consumer group 下最多只能有四个监听的消费者?
  2. 消费者数超过队列数,剔除消费者的策略是什么?
  3. 同一个消费者组下的消费者是轮询获取消息的嘛,为什么几次测试有时候是,有时候不是?
阅读 8.9k
1 个回答
  1. 是的,一个队列只能被最多一个消费者消费,因此消费者实例数量超过队列数量时,超出部分不能消费消息
  2. 剔除策略取决于队列分配策略(org.apache.rocketmq.client.consumer.AllocateMessageQueueStrategy),默认(org.apache.rocketmq.client.consumer.rebalance.AllocateMessageQueueAveragely)按照消费者实例id(ip@pid)排序,最大的消费者实例id没有分配到队列,也就是会被剔除
  3. 消费者对队列负载均衡,只有消费均匀的发送到队列时,消费时才看起来是均衡的,你可以多发送点消息,增加统计样本,看看是否均匀的发送到每个队列
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进