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

已有 5 条评论

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

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

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

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

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

添加新评论