Producer负载均衡

  • 容错机制:开启容错机制后,会进行失败隔离和超时隔离,规避失败的Broker
  • Broker选择:如果随机到了已经发送过的Broker会重新进行选择

Consumer负载均衡

  • Consumer会定时向所有的Broker发送心跳,心跳数据包括消费组名称、订阅关系集合、消息的通信模式、消费者ID等,Broker接收到心跳包后会维护在ConsumerManager中,当Broker监听到Consumer变化之后,会通知Consumer进行ReBalance
  • 在Consumer客户端,也会有一个定时任务,周期性进行Rebalance

Rebalance

Rebalance是一个由消费端平衡queue和consumer的过程,实现原理:

  • 触发时机:

    • 在Consuner启动或者停止的时候,此时消费者数量变化,Consumer会主动发起一次Rebalance
    • 收到Broker的Rebalance通知时
    • 消费者每执行定时任务,每20s触发一次Rebalance
  • 向服务端获取TopicA最新的Queue列表和Consumer列表,根据这些信息重新分配消费关系
  • 分配策略:

    • rocket提供多个消费策略,消费机器不同但是内部代码相同,所以会选择相同的消费策略,保证不同的Consumer节点执行Rebalance后得到相同的分配结果
  • Rebalance之后,消费者会对比消费关系是否变化,有新增的queue则加入pullRequests请求队列中,如果一个queue被移除将被标记drop在后续流程中将会从pullRequests请求队列剔除

Rebalance的缺点

  • 暂停消费

    • 当有新增的consumer时,原来的queue需要分一部分到新的consumer消费,在分配好之前这部分queue的消费会被暂停
  • 重复消费

    • 在切换分配关系的间隙,可能queue的原来consumer还未提交offset就切换到新的consumer了,此时会导致queue的消息被多个Consumer消费了,所以需要在业务上考虑幂等

顺序消息的Rebalance:

因为顺序消息为了严格保证顺序,是不能被多个Consumer消费的,所以顺序消息的Rebalance会直接在queue上加锁,上锁成功后才可以进行消费关系调整

标签: none

已有 20 条评论

  1. 这篇文章不错!

  2. 文字流畅如丝,语言优美动人,读来令人心旷神怡。

  3. 理论深度可再挖掘,以提升文章厚重感。

  4. 作者的布局谋篇匠心独运,让读者在阅读中享受到了思维的乐趣。

  5. 警惕陷入二元对立思维,可尝试中间路径。

  6. 学术术语使用精准,专业性突出。

  7. 对传统与现代的融合思考颇具启发性。

  8. 古典诗词化用自然,毫无斧凿痕迹。

  9. 对话设计自然,符合角色身份与情境。

  10. 建议增加田野调查素材,提升真实性。

  11. 这是一篇佳作,无论是从内容、语言还是结构上,都堪称完美。

  12. 文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。

  13. 情感真挚,直击人心,引发强烈共鸣。

  14. 作者以非凡的视角解读平凡,让文字焕发出别样的光彩。

  15. 哈哈哈,写的太好了https://www.lawjida.com/

  16. 《如此爹娘》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/70741.html

  17. 揭秘传奇世界:如何把握私服市场新机遇:https://501h.com/danzhiye/2024-09-25/37668.html

  18. 你的文章让我感受到了快乐,每天都要来看一看。 http://www.55baobei.com/UjhE32tSfS.html

  19. 哈哈哈,写的太好了https://www.cscnn.com/

  20. 看的我热血沸腾啊https://www.237fa.com/

添加新评论