美文网首页
RocketMq-负载均衡

RocketMq-负载均衡

作者: 麦大大吃不胖 | 来源:发表于2020-12-17 16:56 被阅读0次

    by shihang.mai

    1. 创建Topic

    • 当自动创建topic时,会随机找一个borker生产queue
    • 当我们在console界面创建topic时,会同时操作多个borker的queue。例如不能做到borkerA = 3queue borkerB=2quque
      我们可以用mqadmin 命令创建自有queue的Topic

    2. producer端

    发送的时候可以用MessageQueueSelector类去发送。

    3. consumer端

    1. consumer端的数量最好和MessageQueue数量对等或者是倍数

    2. consumer端有以下几种负载均衡策略,默认使用平均分配

    • 平均分配(AllocateMessageQueueAveragely)
    • 环形分配(AllocateMessageQueueAveragelyByCircle)
    • 手动配置分配(AllocateMessageQueueByConfig)
    • 机房分配(AllocateMessageQueueByMachineRoom)
    • 一致性哈希分配(AllocateMessageQueueConsistentHash)
    • 靠近机房分配(AllocateMachineRoomNearby)
    rocketMqConsumer负载均衡策略

    4. 消息堆积

    现象: mq消息堆积20亿

    问题原因: 当时我们的Topic用了32个queue,consumerGroup线程数只有10几个.queue的数远多于consumer的数

    解决方式

    1. 先4个工程都设置consumerGroup的线程数=32,那么就一共有128个消费线程
    2. 自测一次业务需要40ms
    3. 预测需要18小时才能消费完,实际上18小时多一点
    4. 为了避免新告警延迟,创建一个新的消费组,线程数也是32,也是4个工程,fromwhere设置为最新的offset
    5. 代码中加入逻辑,当消费到当前offset时,不消费.这样旧消费组继续消费,新消费组消费新的告警,并且也避免旧消费组重复消费

    相关文章

      网友评论

          本文标题:RocketMq-负载均衡

          本文链接:https://www.haomeiwen.com/subject/nictwktx.html