14.RocketMQ之高可用性机制

1.2 高可用性机制

image.png

RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。

Master和Slave的区别:在Broker的配置文件中,参数 brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是 Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。

Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是 Producer只能和Master角色的Broker连接写入消息;Consumer可以连接 Master角色的Broker,也可以连接Slave角色的Broker来读取消息。

1.2.1 消息消费高可用

在Consumer的配置文件中,并不需要设置是从Master读还是从Slave 读,当Master不可用或者繁忙的时候,Consumer会被自动切换到从Slave 读。有了自动切换Consumer这种机制,当一个Master角色的机器出现故障后,Consumer仍然可以从Slave读取消息,不影响Consumer程序。这就达到了消费端的高可用性。

1.2.2 消息发送高可用

在创建Topic的时候,把Topic的多个Message Queue创建在多个 Broker上(相同Broker名称,不同 brokerId的机器组成一个Broker组)比如broker-A 和 broker-B,这样当一个Broker组的Master不可 用后,其他组的Master仍然可用,Producer仍然可以发送消息。

RocketMQ目前还不支持把Slave自动转成Master,如果机器资源不足, 需要把Slave转成Master,则要手动停止Slave角色的Broker,更改配置文件,用新的配置文件启动Broker。

发送消息失败的规避策略

image.png

1.2.3 消息主从复制

如果一个Broker组有Master和Slave,消息需要从Master复制到Slave 上,Master有同步复制和异步复制两种复制方式。

slave 代表是从节点不需要配置

SYNC_MASTER-同步复制

同步复制方式是等Master和Slave均写成功后才反馈给客户端写成功状态。

在同步复制方式下,如果Master出故障, Slave上有全部的备份数据,容易恢复,但是同步复制会增大数据写入延迟,降低系统吞吐量。

ASYNC_MASTER-异步复制

异步复制方式是只要Master写成功 即可反馈给客户端写成功状态。

在异步复制方式下,系统拥有较低的延迟和较高的吞吐量.

但是如果Master出了故障,有些数据因为没有被写 入Slave,有可能会丢失;

SLAVE-从节点

Slave 代表是从节点不需要配置

1.2.4 刷盘策略

同步刷盘-写入磁盘

在返回写成功状态时,消息已经被写入磁盘。具体流程是,消息写入内存的PAGECACHE后,立刻通知刷盘线程刷盘, 然后等待刷盘完成,刷盘线程执行完成后唤醒等待的线程,返回消息写 成功的状态。

异步刷盘-写入PAGECACHE

在返回写成功状态时,消息可能只是被写入了内存的PAGECACHE,写操作的返回快,吞吐量大;当内存里的消息量积累到一定程度时,统一触发写磁盘动作,快速写入。

1.2.5 配置

同步刷盘还是异步刷盘,都是通过Broker配置文件里的flushDiskType 参数设置的,这个参数被配置成SYNCFLUSH、ASYNCFLUSH中的 一个。

推荐配置:SYNCMASTER + ASYNCFLUSH

主从同步复制

同步复制是等Master和Slave均写成功后才反馈给客户端写成功状态。

异步复制方式是只要Master写成功即可反馈给客户端写成功状态

这两种复制方式各有优劣:

在异步复制方式下,系统拥有较低的延迟和较高的吞吐量,但是如果Master出了故障,有些数据因为没有被写入Slave,有可能会丢失。

在同步复制方式下,如果Master出故障,Slave上有全部的备份数据,容易恢复。但是同步复制会增大数据写入延迟,降低系统吞吐量。

如果对于消息有零丢失的要求,设置主从同步方式为主从同步复制即可。否则可以选择异步复制的方式。

主从异步刷盘

实际应用中要结合业务场景,合理设置刷盘方式和主从复制方式,尤其是SYNC_FLUSH方式,由于频繁的触发写磁盘动作,会明显降低性能。

通常情况下,应该把Master和Slave设置成ASYNC_FLUSH的刷盘方式。

总结

主从之间配置成SYNC_MASTER的复制方式,这样即使有一台机器出故障,仍然可以保证数据不丢。

**主从刷盘策略配置为ASYNC_FLUSH可以保证吞吐量。

由于配置的主从同步方式是SYNCMASTER,主从刷盘策略配置为ASYNCFLUSH。这样可以保证master和slave的消息都写入到了内存中,即使主从有1台机器发生故障,至少有1台机器存在全量的消息。2台机器同时发生故障的几率太小了,以至于可以忽略不计。

总结:SYNCMASTER可以保证消息不丢失,ASYNCFLUSH可以保证吞吐量。

最后如果对性能要求较高,对消息丢失存在一定的容忍度可以配置为ASYNCMASTER + ASYNCFLUSH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2999.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter iOS 打包 问题处理

日常问题收集: remark: Incremental compilation has been disabled: is not currently compatible with embedding LLVM IR bitcode a. 在Build Settings中搜索Enable Bitcode-> 设置No b. Project-> Targets-> Build Settings-> Custom Compiler Flag…

【Vue3】CustomImport 导入文件组件

1. 效果图 2. 组件完整代码 <template><div class="custom-import-warpper"><el-dialog v-model

TCP版本的 echo server 和 echo client

这里附上博主UDP版本的echo server 和 echo client 如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)_幻荼的博客-CSDN博客 目录 目的 效果 关于服务端的代码解释 服务端代码 客户端 关于客户端代码解释 客户端代码 目的 编写一个TCP版本的ec…

Spring Boot 中的 @RabbitListenerContainerFactory 注解

Spring Boot 中的 RabbitListenerContainerFactory 注解 1. 什么是 RabbitListenerContainerFactory 在 Spring Boot 中&#xff0c;我们可以使用 RabbitListener 注解来监听 RabbitMQ 中的消息。RabbitListener 注解会自动创建一个监听器容器&#xff0c;用于接收和处理消息…

SpringMvc拦截器和手写模拟SpringMvc工作流程源码详解

目录 1. SpringMvc简介 1.1 什么是MVC 1.2 什么是SpringMvc 1.3 SpringMvc 能干什么 1.4 SpringMvc 工作流程 2. SpringMvc拦截器和过滤器 2.1 拦截器 2.1.1 拦截器作用 2.1.2 拦截器和过滤器的区别 2.1.3 拦截器方法说明 2.1.4 多个拦截器执行顺序 2.1.5 自定义拦…

RocketMQ 详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;RocketMQ 详解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪闪发光…

解决磁盘占用率过高100%问题

方法一&#xff1a;关闭程序 首先打开任务管理器&#xff0c;单击磁盘占用率一栏进行排序&#xff0c;查看占用磁盘最高的应用。若占用率最高的始终是同一个三方程序&#xff0c;可尝试卸载。 注&#xff1a;开机时由于频繁读写磁盘&#xff0c;磁盘占用率会很高&#xff0c;等…

Destination unreachable(Port unreachable) 错误原因和解决办法

Destination unreachable(Port unreachable) 是一条由网络设备&#xff08;如路由器或防火墙&#xff09;生成的ICMP&#xff08;Internet Control Message Protocol&#xff09;错误消息&#xff0c;用于通知源设备目标设备或端口无法到达。 一、什么是ICMP ICMP&#xff08;I…

Apikit 自学日记:自动生成 API 文档

功能入口&#xff1a;API管理应用 / 选中某个项目 / 其他菜单 / 数据源同步&#xff08;API文档自动生成&#xff09; 该功能可通过配置数据源信息&#xff0c;实现基于数据源的API信息自动生成API文档。 当前支持5种数据源&#xff1a;Swagger URL、apiDoc、Github、gitlab、…

HDLBits刷题笔记7:Circuits.Combinational Logic.Karnaugh Map to Circuit

Karnaugh Map to Circuit 3-variable 实现如下卡诺图&#xff0c;用sop和pos两种方式 化简&#xff1a; module top_module(input a,input b,input c,output out ); // sop和pos相同assign out a | b | c; endmodule4-variable 实现如下卡诺图&#xff0c;用sop和pos两种方…

【每日一题】Leetcode - 剑指 Offer 43. 1~n 整数中 1 出现的次数

题目 Leetcode - 剑指 Offer 43. 1&#xff5e;n 整数中 1 出现的次数 解题思路 分解数字中的每一位&#xff0c;判断记录 结果 class Solution {public int countDigitOne(int n) {int count 0;for (int i 1; i < n; i) {int localI i;while (localI / 10 ! 0) {in…

汽车通用LCD显示驱动电路芯片DP6524替代PT6524

DP6524是一款利用CMOS技术专门设计的通用LCD驱动IC&#xff0c;完全替代PT6524,采用单片机控制的电子调谐器。它的最大行驶速度可以达到204段输出&#xff0c;可控制多达12个通用输出端口。引脚分配和应用电路都进行了优化&#xff0c;易于PCB布局和节省成本的优势。 主要特性…