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

副本机制的好处

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大家副业都在做什么?csgo搬砖靠谱的副业推荐给你

从来没想过,以前只会玩CSGO的男孩子,现在居然能借助游戏赚到钱了!甚至不需要什么专业的技巧,简简单单 在steam平台选择有利润的道具后,再上架到国内网易BUFF平台,赚取“信息差”差价而已! 谁大…

SpringCloud学习(六)——Feign的简单使用

文章目录 1. Feign 的使用1.1 引入依赖1.2 添加注解1.3 编写Feign客户端1.4 测试 2. Feign中的自定义配置2.1.配置文件方式2.2.Java代码方式 3. Feign 性能优化4. Feign的抽取式使用4.1 抽取配置4.2 引入依赖4.3 指明Client 在此之前,我们服务之间需要进行调用的时候…

读懂MAC地址

MAC地址是一种用于标识计算机网络设备的唯一地址。它是由48个二进制数字组成的,通常表示为12个十六进制数字,每两个数字之间用冒号或连字符分隔开。MAC地址由设备制造商在生产过程中分配,以确保网络上每个设备都有唯一的标识符。 MAC地址的规…

第11章_常用类和基础API

第11章_常用类和基础API 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 字符串相关类之不可变字符序列:String 1.1 String的特性 java.lang.String 类代表字符串…

【大数据之Hadoop】十七、MapReduce之数据清洗ETL

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将分散、零乱、标准不统一的数据整合到一起,为决策提供分析依据。 ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。 1 ETL体系结构 ETL主要是用来实现…

LLM总结(持续更新中)

引言 当前LLM模型火出天际,但是做事还是需要脚踏实地。此文只是日常学习LLM,顺手整理所得。本篇博文更多侧重对话、问答类LLM上,其他方向(代码生成)这里暂不涉及,可以去看综述来了解。 之前LLM模型梳理 …

龙芯中科官方宣布,龙芯中科企业办公信息化平台全面完成国产化替代

4月4日,龙芯中科官方宣布,龙芯中科企业办公信息化平台全面完成国产化替代。龙芯 ERP 系统全系统使用国产化平台,私有化部署于基于龙芯 3C5000 服务器集群的虚拟化云平台上,使用自研 Loongnix 操作系统、自研 LoongDB 数据库及龙芯…

【SQL Server】无需公网IP,就可以远程连接SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

Redis-----什么是Redis?

什么是Redis? redis是一个基于内存的key-value结构数据库。 基于内存存储,读写性能高适合存储热点数据(热点商品、资讯、新闻)企业应用广泛 Redis入门 redis简介 redis是一个开源的内存中的数据结构存储系统,数据库…

哪个洗脱一体机好用?好用的洗拖一体机推荐

洗地机是一款使用非常方便的清洁工具,通常可以实现吸、拖、洗三个功能,对于各类家庭污渍都有着不错的处理能力,无论是干燥垃圾还是潮湿垃圾一律可以有效清理。不过很多新手朋友在选购洗地机时会因为看不懂参数而频繁踩雷。本文为大家整理了洗…

详解语义分割deeplabv3+模型的工业应用流程

来源:投稿 作者:某一个名字 编辑:学姐 导语 在工业视觉应用中,目标检测算法常用于特征的粗定位,而语义分割则在特征的精定位方面有着突出的表现。使用较多的语义分割模型主要有FCN、deeplab系列、unet等,根…

keil5使用c++编写stm32控制程序

keil5使用c编写stm32控制程序 一、前言二、配置图解三、std::cout串口重定向四、串口中断服务函数五、结尾废话 一、前言 想着搞个新奇的玩意玩一玩来着,想用c编写代码来控制stm32,结果在keil5中,把踩给我踩闷了,这里简单记录一下…

【OCR】CTC loss原理

1 CTC loss出现的背景 在图像文本识别、语言识别的应用中,所面临的一个问题是神经网络输出与ground truth的长度不一致,这样一来,loss就会很难计算,举个例子来讲,如果网络的输出是”-sst-aa-tt-e’, 而其ground truth…

深入剖析:如何优化Android应用的性能和内存管理

深入剖析:如何优化Android应用的性能和内存管理 性能和内存管理的重要性 在今天的移动应用开发中,用户对于应用的性能和体验要求越来越高。一款性能卓越的Android应用能够提供流畅的操作体验、快速的响应速度以及较低的资源消耗,从而提高用户…

SpringBoot 集成webSocket

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

HTML5 Input 类型

文章目录 HTML5 Input 类型Input 类型: colorInput 类型: dateInput 类型: datetimeInput 类型: datetime-localInput 类型: emailInput 类型: monthInput 类型: numberInput 类型: rangeInput 类型: searchInput 类型: telInput 类型: timeInput 类型: urlInput 类型: weekHTM…

CLIMS:弱监督语义分割的跨语言图像匹配

文章目录 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation摘要方法语言图像匹配框架 实验结果 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation 摘要 存在的问题 CAM(类激活图)通常只激活有区别的对象…

辉煌优配|黄金价格创近两年半新高!2只黄金股一季度预增

黄金板块早盘走强。 4月14日早盘&#xff0c;黄金板块团体走高&#xff0c;次新股四川黄金开盘半小时内拉升至涨停&#xff0c;封单资金到达7279.78万元&#xff0c;中润资源、晓程科技涨幅居前&#xff0c;分别为8.96%、8.48% 消息面上来看&#xff0c;近期全球黄金期货价格节…

HTML中表格标签<table><tr><tb><th>中单元格的合并问题

前情知晓 层级关系如下&#xff1a; <table><tr><td> </td><th> </th></tr></table> <table>...</table> 用于定义一个表格开始和结束 <tr>...</tr> 定义一行标签&#xff0c;一组行标签内可以建立…

Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

一、Zuul的工作原理 Zuul 1.x的版本是由Servlet以及一系列的Filter组成的&#xff0c;各个组件之间协同合作完成功能&#xff0c;且易于扩展。参看官方的架构图我画了张图&#xff1a; Zuul声明周期&#xff1a; HTTP Request -> DispatcherServlet -> ZuulHandlerMappi…