首页 > 其他分享 >kafka入门(十):副本数据同步

kafka入门(十):副本数据同步

时间:2024-01-21 22:48:18浏览次数:32  
标签:副本 入门 ISR kafka follower 失效 LEO leader

副本

副本(Replica),指的是分布式系统对数据和服务提供的一种冗余方式。

Kafka通过多副本机制实现故障自动转移,在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。

失效副本

在ISR集合之外,也就是处于同步失效或功能失效(比如副本处于非存活状态)的副本统称为失效副本,失效副本对应的分区也就称为同步失效分区,即under-replicated分区。可以通过 kafka-topics.sh 脚本的under-replicated-partitions参数来显示。

怎么判定一个分区是否有副本处于同步失效的状态呢?

通过唯一的broker端参数 replica.lag.time.max.ms 来抉择,当ISR集合中的一个follower副本滞后leader副本的时间超过此参数指定的值时则判定为同步失败,需要将此follower副本剔除出ISR集合。 (注:lag,表示滞后)

一般有两种情况会导致副本失效:(1) follower副本进程卡住,在一段时间内根本没有向leader副本发起同步请求,比如频繁的Full GC。 (2) follower副本进程同步过慢,在一段时间内都无法追赶上leader副本,比如I/O开销过大。

如果只用一个指标来衡量 Kafka,那么同步失效分区(具有失效副本的分区)的个数必然是首选。

ISR伸缩:

kafka检测到 ISR集合中有失效副本时,就会收缩ISR 集合。

随着follower副本不断与leader副本进行消息同步,follower副本的LEO也会逐渐后移,并最终追赶上leader副本,此时该follower副本就有资格进入ISR集合。追赶上leader副本的判定准则是此副本的LEO是否不小于leader副本的HW,注意这里并不是和leader副本的LEO相比。

当ISR集合发生增减时,或者ISR集合中任一副本的LEO发生变化时,都可能会影响整个分区的HW。

follower 副本同步leader副本的数据:

整个消息追加的过程可以概括如下:

(1)生产者客户端发送消息至leader副本(副本1)中。

(2)消息被追加到leader副本的本地日志,并且会更新日志的偏移量。

(3)follower副本(副本2和副本3)向leader副本请求同步数据。

(4)leader副本所在的服务器读取本地日志,并更新对应拉取的follower副本的信息。

(5)leader副本所在的服务器将拉取结果返回给follower副本。

(6)follower副本收到leader副本返回的拉取结果,将消息追加到本地日志中,并更新日志的偏移量信息。

LEO与HW:

follower副本向leader副本拉取消息,在拉取的请求中会带有自身的LEO信息,

leader副本返回给follower副本消息,并且还带有自身的HW信息。

follower副本拉取到消息后,会更新各自的LEO,以及 HW。

leader副本的HW是一个很重要的东西,因为它直接影响了分区数据对消费者的可见性。

kafka入门文章

https://blog.csdn.net/sinat_32502451/category_12465196.html

资料来源

《深入理解Kafka:核心设计与实践原理》

标签:副本,入门,ISR,kafka,follower,失效,LEO,leader
From: https://www.cnblogs.com/expiator/p/17978601

相关文章

  • 【Servlet】Servlet快速入门
    Servlet简介在Java的Web开发中,Servlet是一种用于处理HTTP请求和响应的Java程序。Servlet通常被部署在支持Java的Web服务器上,如ApacheTomcat。在Servlet中,Request对象和Response对象是两个重要的接口,它们用于处理客户端发来的请求和向客户端发送响应。Servlet快速入门创......
  • 【C++入门到精通】C++入门 —— 类和对象(了解类和对象)
     目录一、类和对象的历史由来 二、面向过程和面向对象的初步认识三、类1.引子2.类的定义 3.类的访问限定符及封装        ⭕访问限定符 ......
  • C# 布尔值和条件语句:入门指南和实用示例
    C#布尔值在编程中,通常需要一个只能有两个值之一的数据类型,比如:是/否开/关真/假为此,C#有一个bool数据类型,可以取true或false的值。布尔值使用bool关键字声明布尔类型,只能取true或false的值:示例:boolisCSharpFun=true;boolisFishTasty=false;......
  • 【C++入门到精通】C++入门 —— 引用、内联函数
     目录一、引用1.引用的概念2.引用的特性3.常引用4.引用的使用场景        ⭕做参数        ⭕做返回值5.传值、传引用效率比较值和引用的作为返回值类型的性能比较6.引用和指针的区别 引用和指针的不同点 二、内联函数1.内联函数的概念2.内联函数的特性3.宏与内......
  • C# 布尔值和条件语句:入门指南和实用示例
    C#布尔值在编程中,通常需要一个只能有两个值之一的数据类型,比如:是/否开/关真/假为此,C#有一个bool数据类型,可以取true或false的值。布尔值使用bool关键字声明布尔类型,只能取true或false的值:示例:boolisCSharpFun=true;boolisFishTasty=false;......
  • 【kafka】多节点服务监听同个topic,但消息始终只落在一个服务上
    问题描述如题,就是同一个topic,同一个服务,起了3个节点。预期就是这三个节点(同个镜像),可以相对均衡地消费这个topic上的数据,以提升这个消费的速度。但让人迷惑的事情就是,为什么始终只有一个服务监听到数据,另外两个服务始终监听不到数据呢?把正常的这个停掉报,才会从剩下的两个服务中......
  • springboot整合springSecurity入门案例(实现登录,记住我等常用标签使用)
    一,整合进依赖每个依赖都标了注释,大家可以按照自己需要的来添加,置于配置问件啥的,大家可以参考springboot+mybatisplus+redis整合(附上脚手架完整代码)<!--主要就是加了这个依赖--><dependency><groupId>org.springframework.security</groupId><artifact......
  • 指针入门
    include<stdio.h>definevalues[N_VALUES];floatvalues[N_VALUES];floatvp;forintmain(){intarr[10]={1,2,3,4,5,6,7,8,9,10};printf("%d\n",&arr[9]-&arr[0]);//中间数组的个数return0;}strlen求字符串的长度'/0'之前的字符......
  • 零基础入门Vue之窥探大法——计算与侦听
    前言在上一小节我介绍了我学习vue入门插值语法的过程。在本篇,我将记录我对vue的计算属性和侦听器的学习记录注:本篇对于”侦听“和”监听“是一个意思一、计算属性在官网上,可以看到这样一个例子:<divid="example">{{message.split('').reverse().join('')}}</di......
  • kafka入门(九):kafka分区分配策略
    kafka分区分配策略参数:Kafka提供了消费者客户端参数partition.assignment.strategy来设置消费者与订阅主题之间的分区分配策略。默认情况下,此参数的值为org.apache.kafka.clients.consumer.RangeAssignor,即采用RangeAssignor分配策略。除此之外,Kafka还提供了另外两种分配策略:R......