【消息队列】聊一下Kafka副本机制

news2024/11/16 10:31:44

副本机制的好处

副本在分布式系统下,不同的网络互联的机器保存同一份数据。我们知道在分布式系统中,都会通过数据镜像、数据冗余的方式来提升高可用性。

  • 提供数据冗余:这点比较好理解,说白了就是通过数据冗余在不同的服务器上,即使一台出现宕机,也不会影响到系统的正常运转,并且因为有数据持久化机制,所以在高可用系统架构中必定使用。
  • 高伸缩性:将一份数据存储到多个地方,可以有效提高读的能力。
  • 改善数据局部性:可以将不同的数据放在离用户近的地方,比如CDN这种机制。

但是很可惜的是,Kafka只提供了第一种机制,后两者没有提供。

副本定义

我们知道Kafka的层级是在不同的主题下,将同一个主题拆分成不同的分区,并且在分区层级下有不同的副本,通过存储在不同的Broker中,以提供数据的可用性。而这个副本本质上就是一个可以追加写的日志文件。
所以在实际的生产环境中,可能不同的Broker上同时存储不同主题的分区的副本数据。
如下图所示,三个Broker,主题1分区0的三个副本分别存储在不同的Broker上。即使Broker2宕机了,但是Broker1和3存活,依然可以提供数据访问。
在这里插入图片描述

副本角色

既然分区可以存储多个副本,那么多个副本之间的数据是如何保证数据一致性的,而Kafka采用的就是基于领导者的副本机制
在这里插入图片描述
1.副本分为两类,领导者副本和追随者副本。每个分区在创建时都要选举一个领导者副本,而追随者副本进行数据同步
2.对副本的读写操作都集中在领导者副本上,而追随者副本的唯一作用就是从领导者副本异步拉取消息,写入到自己的提交日志中,实现和领导者副本的同步。
3.当领导者副本所在的Broker挂掉之后,Zk可以通过监听机制,在已有的副本中选择一个新的领导者副本,而当老的领导者副本恢复后,只能成为新的追随者副本。
以上就是副本的相关机制,而这就是Kafka副本只提供了第一种数据冗余,而不能通过追随者副本进行读。
为什么这样设计?

方便实现Read-your-writes
Read-your-writes的意思是在生产者向Kafka写入一条消息后,消费者马上去消费这条消息。如果副本可以提供读的话,因为存在数据同步的延时,在副本上可能读不到这条数据。而直接对领导者副本写读的话不会出现这样的问题。

方便实现单调读(Monotonic Reads)
单调读一致,说白了就是不会出现消费者一会能读到一会读不到。
比如有两个副本A和B,向领导者写入1,2两条消息,A同步了1,2 但是B只同步了1,当从A副本中读到了1,切到B副本中没有读到2,那么此时数据就出现丢失。

In-sync Replicas(ISR)

我们上面说了追随者副本是异步拉取领导者副本的消息,那么什么情况下追随者副本才和领导者副本同步呢,kafka引入了ISR集合,也就是Leader副本天然就在ISR集合中,而只有有Leader副本同步的副本才可以进入ISR集合中。
在这里插入图片描述
什么情况下追随者副本才满足进入ISR的条件,也就是实时同步Leader副本消息
图中,有一个Leader副本和两个追随者副本,Leader副本写入10条消息,而Follower1同步了6条,Follower2同步了3条,可以说两个追随者副本和Leader副本不同步嘛,答案其实是不一定。
决定是否与Leader副本同步的条件是,Broker 端参数 replica.lag.time.max.ms 参数值,默认是10S,如果连续不超过10S,那么追随者副本就是同步Leader副本。
当追随者副本超过10S不同步时,会被T出ISR集合,反之如果追上来,就会重新加入到ISR集合,而ISR集合是实时动态变化的。

Unclean 领导者选举(Unclean Leader Election)

我们知道Leader副本天然就是ISR中,但是如果ISR集合中为0,说明Leader副本也挂了,这个时候如何进行选举,实际上Kafka将不在ISR集合中的副本成为非同步副本,但是非同步副本明显是落后于Leader副本的,而选举这种非同步副本为Leader过程称为Unclean领导者选举。可以通过unclean.leader.election.enable 控制是否允许 Unclean 领导者选举。默认false。
酸与碱
如果使用Unclean领导者选举,那么势必会出现数据不一致性,但是可以提供服务。如果不使用Unclean选举,虽然保证了数据一致性,但是服务不可用。显然这就是一个不能互相平衡的选举,一般来说我们需要结合具体的业务来进行配置,但是一般还是不建议配置。

小结

副本机制是存在于Broker中的,而副本提供了是那种好处,数据冗余,高伸缩性,改善数据局部性。以及副本是否实时同步的标准。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Github+picGo搭建图床,超详细教程

超详细教程使用GitHubPicGo搭建图床配置GitHub创建图床仓库生成token配置PicGo下载配置配置Typora打开Typora的设置设置picgo的监听端口号使用GitHubPicGo搭建图床 起因:gitee的图床挂了,原因是gitee的防盗链,所以就打算更换图床&#xff0c…

【周末闲谈】新的编程方式,程序员的未来何在?

个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言,模仿还是超越? ✨第二周 畅想AR 文章目录系列目录前言了解编程语言机器语言💻💻&am…

二分查找(二分法,折半查找)

📝个人主页:爱吃炫迈 💌系列专栏:数据结构与算法 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录二分查找算法要求查找过程二分法的两种写法LeetCode(持续更新&a…

【Docker】Docker网络

介绍 docker启动 在docker启动之后 &#xff0c;会生成一个docker0的虚拟网桥 [root192 kd]# ifconfig docker0: flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255inet6 fe80::42:faff:fef5:a71d prefix…

linux服务器如何测试网速

linux服务器如何测试网速 说到测网速我相信很多小伙伴都知道在自己的电脑上操作&#xff0c;但我们平时用的比较多的系统还是Windows系统&#xff0c;那么到了linux系统上你知道怎么测网速吗&#xff1f; 今天还是艾西的服务器小知识跟大家讲讲在linux系统上怎么测网速&#x…

Dapr微服务

** 一、Dapr是什么 ** 官方解释&#xff1a;Dapr (Distributed Application Runtime)是一个可移植的、事件驱动的运行时 可移植&#xff1a;指与软件从某一环境转移到另一环境下的难易程度。事件驱动&#xff1a;调用与被调用方解耦 自己理解&#xff1a;Dapr为任何语言编写…

springboot如何优雅的打印项目日志

文章目录如何优雅的打印项目日志原理实现日志打印Filter注入容器如何优雅的打印项目日志 框架 springboot 原理 使用filter拦截请求&#xff0c;打印出请求、响应&#xff0c;及耗时 知识点 1、OncePerRequestFilter Filter base class that aims to guarantee a single …

【数据结构与算法篇】时间复杂度与空间复杂度

目录 一、数据结构和算法 1.什么是数据结构&#xff1f; 2.什么是算法&#xff1f; 3.数据结构和算法的重要性 二、算法的时间复杂度和空间复杂度 1.算法效率 2.算法的复杂度 3.复杂度在校招中的考察 4.时间复杂度 5.空间复杂度 6.常见复杂度对比 7.复杂度的OJ练…

鸿鹄工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离构建工程项目管理系统

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

数据结构入门-10-AVL

文章目录一、AVL的性质1.2 平衡二叉树定义二、添加需达到平衡2.1 平衡因子2.1.2 平衡因子的实现2.2 判断该二叉树是否为平衡二叉树2.3 左旋右旋2.3.1 左旋LL右旋RR基本原理2.3.2 LR RLLRRL三、AVL中删除一、AVL的性质 平衡二叉树 AVL树得名于它的俄罗斯发明者G. M. Adelson-Ve…

信息系统项目管理师第四版知识摘编:第23章 组织通用管理​

第23章 组织通用管理​ 组织通用管理是项目管理的关键前提和基础&#xff0c;它为项目管理提供思想路线和基本原则与方法&#xff0c;项目管理则是通用管理方法在特定场景下的具体表现。​ 23.1人力资源管理​ 23.1.1人力资源管理基础​ 在人力资源管理方面&#xff0c;组织…

对XSS攻击进行的一些总结

简介 XSS漏洞最早被发现是在1996年&#xff0c;由于JavaScript的出现&#xff0c;导致在Web应用程序中存在了一些安全问题。在1997年&#xff0c;高智文(Gareth Owen)也就是“XSS之父”&#xff0c;在他的博客中描述了一种称为“脚本注入”(script injection)的攻击技术&#x…

分享一个RecyclerView嵌套webview 滑动不流畅的解决方法

因RecyclerView 和webview 或者X5的webview 都具有滑动的功能 所以在做嵌套的时候 会出现滑动不流畅 等问题 解决思路 就是判断滑动的时候 是否自身消耗 或者父布局的RecycleView消耗 开发中还遇到个问题 就是 更换成x5的时候 getScrolly() 返回的一直是0 改成getWebScrollY(…

2022国赛16:神州路由器交换机BGP配置实例1

实验拓扑图 一、基本配置: R1配置: Router>ena Router#conf Router_config#host R1 R1_config#int g0/0 R1_config_g0/0#ip add 202.11.1.1 255.255.255.252 R1_config_g0/0#int l0 R1_config_l0#ip add 1.1.1.1 255.255.255.255 R1_confi

【iOS】iOS语音通话回音消除(AEC)技术实现

一、前言 在语音通话、互动直播、语音转文字类应用或者游戏中&#xff0c;需要采集用户的麦克风音频数据&#xff0c;然后将音频数据发送给其它终端或者语音识别服务。如果直接使用采集的麦克风数据&#xff0c;就会存在回音问题。所谓回音就是在语音通话过程中&#xff0c;如…

Minikube安装、运行

1.Minikube是什么 本地的k8s集群&#xff0c;方便开发者学习k8s。 2.安装的前提条件 2个CPU货以上。2G内存或以上。20G磁盘或以上。可以链接互联网。安装docker&#xff08;官网说或者一个虚拟环境&#xff0c;这个不考虑&#xff09;。 3.官网地址 minikube start | minik…

docker部署mysql5.7

1、拉取镜像 docker pull mysql:5.72、运行容器 docker run -p 3306:3306 --name my-mysql -v $PWD/conf:/etc/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORDqazWSX123 -d mysql:5.7-v $PWD/conf:/etc/mysql指令是挂载mysql的配置文件到宿主机 -v $PWD/data:/var…

基于Java+SpringBoot+vue的口腔管家平台设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例&#xff08;300套&#xff09; 目录 一、效果演示 二、…

DJ3-4 实时调度

目录 3.4.1 实现实时调度的基本条件 1. 提供必要的信息 2. 系统的处理能力强 3. 采用抢占式调度机制 4. 具有快速切换机制 3.4.2 实时调度算法的分类 1. 非抢占式调度算法 2. 抢占式调度算法 3.4.3 常用的几种实时调度算法 1. 最早截止时间优先 EDF&#xff08;Ea…

拼多多按关键字搜索商品 API

一、拼多多平台优势&#xff1a; 1、独创拼团模式 拼团拼单是拼多多独创的营销模式&#xff0c;其特点是基于人脉社交的裂变传播&#xff0c;非常具有传播性。 由于本身走低价路线&#xff0c;加上拼单折扣&#xff0c;商品的分享和人群裂变效果非常明显&#xff0c;电商前期…