【RocketMQ系列十二】RocketMQ集群核心概念之主从复制生产者负载均衡策略消费者负载均衡策略

news/2025/3/15 15:30:20/

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

文章目录

    • 1. 主从复制
    • 2. 生产者负载均衡策略
    • 3. 消费者负载均衡策略

本文将介绍详细介绍RocketMQ集群中的几个核心概念,首先会介绍集群的主从复制,接着会介绍生产者负载均衡策略以及消费者的负载均衡策略。

1. 主从复制

RocketMQ提供了三种集群搭建方式。

  1. 2主2从同步复制方式( 2m-2s-sync)

    2主2从同步复制方式是本次集群搭建采取的方式。它使用同步复制的方式进行主从之间的数据复制,保证了消息的安全投递,不会丢失,但是会影响吞吐量。一般应用在对消息可靠性要求比较高的场景,比如订单系统,金融系统这种不容许消息数据丢失的场景。

    在RocketMQ中可以使用 ./conf/2m-2s-sync 文件夹内的配置文件做集群配置。

    在2主2从同步复制场景下,当生产者向broker集群中的某个broker的master节点的队列中写入消息之后,只有当消息被同步到该broker的slave节点之后,broker集群才会给生产者发送ack消息。就像下图中当消息被发送到 broker-a 的master节点之后,只有消息被同步到 broker-a的slave节点之后,broker集群才会向生产者发送ack消息。

    RocketMQ集群架构-主从复制

  2. 2主2从异步复制方式(2m-2s-async)

    2主2从异步复制的方式即主从之间的数据复制采取的是异步复制的方式,这种方式相比于同步复制的方式吞吐量有提升,但是可能会丢失消息。

    在RocketMQ中可以使用 ./conf/2m-2s-async 文件夹内的配置文件做集群配置。

    在2主2从异步复制场景下,当生产者向broker集群中的某个broker的master节点的队列中写入消息之后,broker集群才会给生产者发送ack消息。就像下图中当消息被发送到 broker-a 的master节点之后,broker集群就会向生产者发送ack消息。

    RocketMQ集群架构-主从复制-2m-2s-async

  3. 2主无从方式(2m-noslave)

    2主无从的方式由于没有从服务器,所以,不存在主从之间的数据复制,一般在生产环境不会被采用,因为主服务器一旦宕机,消息就有可能会丢失。

    在RocketMQ中可以使用 ./conf/2m-noslave 文件夹内的配置文件做集群配置。

2. 生产者负载均衡策略

生产者的负载均衡策略其实就是说生产者在发送消息时如何选择队列的。查看RocketMQ的源代码可以发下生产者采取的是轮询的方式。

   int index = Math.abs(sendQueue.incrementAndGet() % messageQueueList.size());MessageQueue mq = messageQueueList.get(index);

详细介绍可以查看 【RocketMQ系列七】消费者和生产者的实现细节 本文。

3. 消费者负载均衡策略

在RocketMQ中,Consumer端的两种消费模式(Pull/Push)都是基于拉模式来获取消息的,而在Push模式只是对Pull模式的一种封装,其本质实现为消息拉取线程在从服务器上拉取到一批消息后,提交到消息消费线程池,然后,又"马不停蹄"继续向服务器再次常识拉取消息。如果没有拉取到消息,则延迟一下又继续拉取。

在两种基于拉模式的消费方式(Pull/Push)中,均需要Consumer端知道从Broker端的哪个消息队列中去获取消息。所以,需要在Consumer端来做负载均衡,即Broker端中多个MessageQueue 分配给同一个ConsumerGroup中的哪些Consumer消息。

Consumer的负载均衡策略可以通过Consumer的api来进行设置。

consumer.setAllocateMessageQueueStrategy(new AllocateMessageQueueAveragelyByCircle());

所有负载均衡策略均实现了AbstractAllocateMessageQueueStrategy接口。RocketMQ提供了如下几个负载均衡策略。

  1. AllocateMachineRoomNearby:基于机房近侧优先级的代理分配策略。可以指定实际的分配策略。如果任何使用者在机房中活动,则部署在同一台机器中的代理的消息队列仅分配给这些使用者。否则,这些消息队列可以与所有消费者共享。
  2. AllocateMessageQueueAveragely: 平均哈希队列算法,给每个消费者平均分配MessageQueue。
  3. AllocateMessageQueueAveragelyByCircle: 循环平均哈希队列算法(轮询),依次给消费者组内的消费者分配MessageQueue。
  4. AllocateMessageQueueByConfig:不分配,通过指定MessageQueue列表来消费。
  5. AllocateMessageQueueByMachineRoom:机房哈希队列算法,如支付宝逻辑机房。
  6. AllocateMessageQueueConsistentHash:一致哈希队列算法,带有虚拟节点的一致性哈希环。

RocketMQ默认使用的是 AllocateMessageQueueAveragely。需要注意的是,在MessageQueue和Consumer之间一旦发生对应关系的改变,就会触发rebalance,进行重新分配。


http://www.ppmy.cn/news/1172935.html

相关文章

vim 使用文档笔记

1. i:进入编辑模式 2. ESC:进入一般命令模式 3. h 或 ←:光标向左移动一个字符 4. j 或 ↓:光标向下移动一个字符 5. k 或 ↑:光标向上移动一个字符 6. l 或 →:光标向右移动一个字符 7. num&#xf…

乾坤js隔离

乾坤,作为一款微前端领域的知名框架,其建立在single-spa基础上。相较于single-spa,乾坤做了两件重要的事情,其一是加载资源,第二是进行资源隔离。而资源隔离又分为Js资源隔离和css资源隔离。 我们把Js隔离机制常常称作…

ABB变频器使用PROFINET IO通信协议时的输入和输出介绍

ABB变频器使用PROFINET IO通信协议时的输入和输出介绍 前面和大家分享了 ABB变频器使用PROFINET IO通信模块时的激活方法 本次继续和大家分享ABB变频器使用PROFINET IO通信协议时的数据输入和输出。 如下图所示,在参数号52、53中可以设置现场总线适配器的数据输入和数据输出,…

架构设计系列5:如何设计高可用架构

#1024程序员节|参与投稿,赢限定勋章和专属大奖# 当今的数字时代,高可用架构已经成为了现代应用和服务的基石。无论是企业级应用、云计算平台还是互联网服务,高可用性都是确保系统在面临各种挑战时保持稳定运行的关键要素。 本文…

电影评分数据分析案例-Spark SQL

# cording:utf8from pyspark.sql import SparkSession from pyspark.sql.types import IntegerType, StringType, StructType import pyspark.sql.functions as Fif __name__ __main__:# 0.构建执行环境入口对象SparkSessionspark SparkSession.builder.\appName(movie_demo)…

Ubuntu挂载NFS(Network File System) ,怎么解决权限不一致的问题?

文章目录 1,挂载时,使用noacl选项2,挂载时,使用all_squash选项3,检查文件夹权限755 权限说明 4,查看错误消息推荐阅读 在Ubuntu上挂载NFS(Network File System) 1共享目录时,权限不一致问题可能…

强大的虚拟机软件 VMware Fusion Pro 13中文最新 for mac

VMware Fusion Pro是一款虚拟化软件,它允许在Mac电脑上同时运行Windows和其他操作系统,而无需重启电脑,它采用了领先的虚拟化技术,能够保证在Mac电脑在同时运行多个操作系统时表现出极高的效率和稳定性。 VMware Fusion Pro具有以…

编程小白的自学笔记十七(python办公自动化操作EXCEL表格之作图)

系列文章目录 编程小白的自学笔记十六(python办公自动化操作EXCEL表格) 编程小白的自学笔记十五(python办公自动化操作EXCEL表格) 编程小白的自学笔记十四(python办公自动化创建、复制、移动文件和文件夹 编程小白…