首页 > 其他分享 >Kafka副本机制

Kafka副本机制

时间:2023-06-12 13:00:15浏览次数:44  
标签:副本 ISR 领导者 Broker Kafka 机制 Leader

1 副本机制的定义:所谓副本机制(Replication),也可以称之为备份机制,通常是指分布式在多台网络互连的机器上保存有相同的数据拷贝。
2 副本机制的好处:

  • 提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。
  • 提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。
  • 改善数据局部性。允许将数据放入与用户地理位置相近的地方,从而降低系统延时。

但 Kafka的副本机制,只实现了提供数据冗余的价值。

3 副本定义:
A :Kafka有主题的概念,每个主题又分为若干个分区。副本的概念是在分区层级下定义的,每个分区配置有若干个副本。
B :所谓副本(Replica),本质是一个只能追加写消息的提交日志。
   根据Kafka副本机制的定义,同一个分区下的所有副本保存有相同的消息序列,这些副本分散保存在不同的Broker上,从而能够对抗部分Broker宕机带来的数据不可用。

实例:在实际生产环境中,每台 Broker 都可能保存有各个主题下不同分区的不同副本,因此,单个 Broker 上存有成百上千个副本的现象是非常正常的。

  接下来我们来看一张图,它展示的是一个有 3 台 Broker 的 Kafka 集群上的副本分布情况。从这张图中,我们可以看到,主题 1 分区 0 的 3 个副本分散在 3 台 Broker 上,其他主题分区的副本也都散落在不同的 Broker 上,从而实现数据冗余。

4 副本角色:
A :为解决分区下多个副本的内容一致性问题,常用方案就是采用基于领导者的副本机制。
B :在kafka中,副本分两类:领导者副本和追随者副本。每个分区在创建时都选举一个副本,称为领导者副本,其余的副本自动成为追随者副本。
C :Kafka的副本机制比其他分布式系统严格。Kafka的追随者副本不对外提供服务。所有的请求都要由领导者副本处理。追随者副本唯一的任务就是从领导者副本异步拉取消息,并写入到自己的提交日志中,从而实现与领导者副本的同步。
D :当领导者副本所在Broker宕机了,Kafka依托于Zookeeper提供的监控功能能够实时感知到,并立即开启新一轮的领导者选举,从追随者副本中选一个新的领导者。当老的Leader副本重启回来后,只能作为追随者副本加入到集群中。

4 Kafka副本机制的优点:
A :方便实现“Read-your-writes”
(1)含义:当使用生产者API向Kafka成功写入消息后,马上使用消息者API去读取刚才生产的消息。
(2)如果允许追随者副本对外提供服务,由于副本同步是异步的,就可能因为数据同步时间差,从而使客户端看不到最新写入的消息。
B :方便实现单调读(Monotonic Reads)
(1)单调读:对于一个消费者用户而言,在多处消息消息时,他不会看到某条消息一会存在,一会不存在。
(2)如果允许追随者副本提供读服务,由于消息是异步的,则多个追随者副本的状态可能不一致。若客户端每次命中的副本不同,就可能出现一条消息一会看到,一会看不到。

5 In-sync Replicas(ISR)同步副本
A :追随者副本定期的异步拉取领导者副本中的数据,这存在不能和Leader实时同步的风险。
B :Kafka引入了In-sync Replicas。ISR中的副本都是于Leader同步的副本,相反,不在ISR中的追随者副本就是被认为是与Leader不同步的。
C :Leader 副本天然就在ISR中,即ISR不只是追随者副本集合,他必然包括Leader副本。甚至某些情况下,ISR只有Leader这一个副本。

D :follower副本是否与leader同步的判断标准取决于Broker端参数 replica.lag.time.max.ms参数值。默认为10秒,只要一个Follower副本落后Leader副本的时间不连续超过10秒,那么Kafka就认为该Follower副本与leader是同步的,即使此时Follower副本中保存的消息明显小于Leader副本中的消息。
E :如果同步过程持续慢于Leader副本消息的写入速度,那么replica.lag.time.max.ms时间后,此Follower副本就会被认为是与Leader副本不同步的,因此不能再放入ISR中。此时,kafka会自动收缩ISR的进度,将该副本“踢出”ISR。ISR是一个动态调整的集合,而非静态不变的。

6 Unclean 领导者选举(Unclean Leader Election)
A :ISR是可以动态调整的,所以会出现ISR为空的情况,由于Leader副本天然就在ISR中,如果ISR为空了,这说明Leader副本也挂掉了,Kafka需要重新选举一个新的Leader。
B :Kafka把所有不在ISR中的存活副本都会称为非同步副本。通常,非同步副本落后Leader太多,如果让这些副本做为新的Leader,就可能出现数据的丢失。在kafka中,选举这种副本的过程称为Unclean领导者选举。
C :Broker端参数unclean.leader.election.enable 控制是否允许Unclean领导者选举。开启Unclean领导者选举可能会造成数据丢失,但它使得分区Leader副本一直存在,不至于停止对外提供服务,因此提升了高可用性。禁止Unclean领导者选举的好处是在于维护了数据的一致性,避免了消息丢失,但牺牲了高可用性。

标签:副本,ISR,领导者,Broker,Kafka,机制,Leader
From: https://www.cnblogs.com/wushaoyu/p/14911555.html

相关文章

  • Redis两种持久化机制RDB和AOF详解
    redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。幸好Redis还为我们提供了持久化的机制,分别是RDB(RedisDataBase)和AOF(AppendOnlyFile)。在这里假设你已经了解了redis的基础语法,某字母网站都有很好的教程,可以去看。基本使用的文章......
  • Kafka通信模型/流程
    Kafka的Producer、Broker和Consumer之间采用的是一套自行设计的基于TCP层的协议由于UDP协议是一种不可靠的传输协议,所以Kafka系统采用TCP协议作为服务间的通信协议通信通信模型Reactor线程模型JavaNIO中的selector模型。最简单的Reactor模型中,有多个client向服务端发送请......
  • 激活裂变机制提高转化率
     优化AARR模型,将推荐引入各环节,而不是仅在最后 必须转变的四大理念 用户传播的六大动机:利益/共鸣/表达想法/助人形象塑造/化较  情感驱动的六种模式:炫耀/求关注/自我认同/同理心/成就感/利他 利益驱动的两种模式:省钱驱动+赚钱驱动 用户运营四大模型:RFM+金字塔+痛点路......
  • 2-kafka日志和分区
    1.topic中日志存储形式分区内部有序,但是同一分区不同partion之间的消息的顺序是无法得知的;2.分区有序概念 kafka是消息队列,数据在写入topic是按照轮循或者hash(key)%分区数方式将数据写入,分区中是无法保证分区与分区数据的顺序,只能保证分区内部数据的顺序,但是无法得知分区......
  • Spring事件监听机制使用和原理解析
    你好,我是刘牌!前言好久没有更新Spring了,今天来分享一下Spring的事件监听机制,之前分享过一篇Spring监听机制的使用,今天从原理上进行解析,Spring的监听机制基于观察者模式,就是就是我们所说的发布订阅模式,这种模式可以在一定程度上实现代码的解耦,如果想要实现系统层面的解耦,那么消息......
  • Dubbo的spi机制分析和实战案例
    留下来一个问题,想深入学习Dubbo源码,你需要具备哪些技术点。技术点Springxml自定义标签或通过@DubboComponentScan("con.tian.dubbo.service")扫描@DubboService注解设计模式:模板方法模式、装饰器模式、责任链模式、代理模式、工厂模式Netty基本知识:创建服务端和客户端,handler,编......
  • 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类
    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制1.时间偏移模块(TSM)视频流的爆炸性增长为以高精度和低成本执行视频理解任务带来了挑战。传统的2DCNN计算成本低,但无法捕捉视频特有的时间信息;3DCNN可以得到良好的性能,但计算量......
  • 深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类
    深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制1.时间偏移模块(TSM)视频流的爆炸性增长为以高精度和低成本执行视频理解任务带来了挑战。传统的2DCNN计算成本低,但无法捕捉视频特有的时间信息;3DCNN可以得到良好的性能,但计算......
  • 从JDK源码级深入剖析main方法的运行机制
    如果你是一名Java应用开发工程师,你应该对“publicstaticvoidmain(String[]args)”这段代码再熟悉不过了,然而你是否了解main方法是如何调用的,为什么我们运行java.exe,就能启动应用程序?下面,让我们来一探究竟吧!首先,聊一聊,java.exe文件是怎么来的如果你下载了OpenJDK源码,在源码目......
  • kafka 监控系列kafka manager
    Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽。为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafka管理器的基于Web工具,叫做KafkaManager。这个管理工具可以很容易地发现分布在集群中的哪些topic分......