Kafka 设计原理——副本与ISR设计

article/2025/9/13 19:34:06

目录

      • 副本与ISR设计
        • Follower副本同步
        • ISR设计

副本与ISR设计

一个Kafka分区本质就是一个备份日志,即利用多份相同的备份共同提供冗余机制来保持系统高可用性。
这些备份在Kafka中被称为副本(replica)。Kafka把分区的所有副本均匀地分配到所有broker上。
并从这些副本中挑选一个作为leader副本对外提供服务,而其他副本被称为Follower副本,只能被动地向leader副本
请求数据,从而保持与leader副本的同步。

所谓ISR,就是Kafka集群动态维护的一组同步副本集合(in-sync replicas)。
每个topic分区都有自己的ISR列表,ISR中的所有副本都与leader保持同步状态,
leader副本总是包含在ISR中的,只有ISR中的副本才有资格被选举为leader。
而Producer写入一条kafka消息只有被ISR中的所有副本都接收到,才被视为已提交状态。

Follower副本同步

Follower副本只做一件事:向leader副本请求数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vd9duHT9-1664176636239)(img.png)]

  • 起始位移(base offset):表示该副本当前所含的第一条消息的offset。
  • 高水印值(high watermark HW):副本高水印值,保存了该副本最新一条已提交消息的位移。leader分区的HW值决定了副本中已提交消息的范围
    也确定了consumer能够获取的消息上限,超过HW值的所有消息都被视为未提交成功的,每个Follower副本都有HW值,但是只有leader副本的HW值
    才能决定Clients能看到的消息数量。
  • 日志末端位移(log end offset LEO):副本日志中下一条待写入消息的offset。所有副本都需要维护自己的LEO信息,每当leader副本接收到
    Producer端推送的消息,它会更新自己的LEO,同样,Follower副本向leader副本请求数据后也会增加Follower自身的LEO。事实上只有ISR
    中的所有副本都更新了对应的LEO后,leader副本才会向右移动HW值表名消息写入成功。

Follower/Leader副本同步流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9J5FXBTw-1664176636240)(img_1.png)]

对于acks=-1的producer而言,只有完整地做完上面所有5步操作,producer才能正常返回,标志着这条消息发送成功。

ISR设计

1、0.9.0.0版本之前

Kafka提供了一个参数replica.lag.max.messages用于控制Follower副本落后leader副本的消息数,一旦超过这个消息数,
则视为该Follower为不同步状态,从而需要被Kafka踢出ISR。

导致follower与leader不同步的原因:

  • 请求速度追不上;
  • follower进程卡住;
  • 新创建的副本;

relica.lag.time.max.ms用来检测第一种情况,另外提供参数replica.lag.time.max.ms用于检测另外两种情况,若
follower副本无法再这个时间内向leader请求数据,则会被视为不同步,被踢出ISR。

缺陷

无法正确设置replica.lag.max.messages参数,若消息消费者批次发送消息数超过这个参数值,就会出现这样的情况:
它们不断地被踢出ISR,然后重新加回ISR,造成了与leader不同步、再同步、再不同步。大大增加了开销。
并且这个参数是全局设置的,对于不同业务不同流量的topic也是不能同时适用的。

2、0.9.0.0版本之后

去掉replica.lag.max.messages参数,统一改用relica.lag.time.max.ms参数,即follower落后leader副本的事件
间隔,对于“请求速度追不上的情况”,检测机制也发生了变化——如果一个follower副本落后leader的时间持续性地超过这个参数值
那么该follower副本就是不同步的,只要不是持续性落后,就不会出现反复一进一出的现象。


http://chatgpt.dhexx.cn/article/dETgKhAa.shtml

相关文章

ISR吞吐性能问题

ISR大致可以分几类: Cisco 860、880、890 ISR1800 (fixed)、1800 (modular)、2800、3800 Series ISR1900、2900、3800、3900 Series ISR4K 每一代的设备,设备的性能肯定都不一样,本摘要,将主要记录ISR的吞吐性能问题。 1、下图主要…

生产故障|Kafka ISR频繁伸缩缩引发性能急剧下降原因分析

本文是笔者双十一系列第二弹,源于一个双十一期间一个让笔者猝不及防的生产故障,本文将详细剖析Kafka的副本机制,以及ISR频繁变更(扩张与伸缩)为什么会导致集群不可用。 1、Kafka副本机制 Kafka数据组织方式是topic-parition的结构&#xff…

关于kafka中ISR、AR、HW、LEO、LSO、LW的含义详解

kafka中的ISR、AR又代表什么?ISR伸缩又是什么? ​ 分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas&#xf…

c4isr系统有无服务器,什么是C4ISR系统?

C4ISR是指挥、控制、通信、计算机、情报、侦察与监视系统的英文简称,是美国各军兵种作战系统的大脑和神经。其主要功能是把作战系统各部分连接起来,构成一个灵活、机动、可靠、无缝的网络,确保各参战部队能依靠网络进行以网络为中心的现代化战…

Next.js性能优化之ISR渲染入门和原理探索

前言 术语说明: SSR —— 服务端渲染SSG —— 静态生成ISR —— 增量静态化Date Fetch 函数 —— 本文特指服务端数据获取的几种函数 getStaticProps 、 getServerSideProps 、 getInitialProps 、 getStaticPaths 。 Next.js 中最突出的莫过于它的渲染模式&…

Kafka之分区副本与ISR

概念 什么是副本 Kafka的Topic分区本质是一个用于存储Topic下的消息的日志,但是只存一份日志会因为机器损坏或其他原因导致消息丢失不可恢复, 因此需要多个相同的日志作为备份,提高系统可用性,这些备份在kafka中被称为副本(rep…

Kafka的ISR收缩机制

ISR什么时候收缩ISR什么时候扩展ISR的传播机制Broker宕机之后怎么ISR的收缩? Kafka在启动的时候,会启动一个副本管理器ReplicaManager,这个副本管理器会启动几个定时任务。 ISR过期定时任务isr-expiration,每隔replica.lag.time.max.ms/2毫秒就执行一次。ISR变更的…

Kafka ISR

ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才…

kafka中的ISR、AR又代表什么?ISR伸缩又是什么?

kafka中的ISR、AR又代表什么?ISR伸缩又是什么? ​ 分区中的所有副本统称为AR(Assigned Repllicas)。所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas&#xff09…

Kafka之ISR机制的理解

Kafka对于producer发来的消息怎么保证可靠性? 每个partition都给配上副本,做数据同步,保证数据不丢失。 副本数据同步策略 和zookeeper不同的是,Kafka选择的是全部完成同步,才发送ack。但是又有所区别。 所以&…

中断ISR技术架构

架构一 ISR采用立即响应思路,技术架构如下图: 优点:简单。 缺点:处理性能不高,中断优先级规划性不高(仅仅区分CPU的32个优先级别,针对不同类型中断优先级不支持)。 选型:对于硬件支持多级中断…

【Java面试】什么是 ISR,为什么需要引入 ISR

Hi,大家好,我是Mic。 一个工作5年的粉丝,在简历上写精通Kafka。 结果在面试的时候直接打脸。 面试官问他:“什么是ISR,为什么需要设计ISR” 然后他一脸懵逼的看着面试官。 下面看看普通人和高手的回答。 需要高手面试文…

2022年正式赛题网络系统管理Linix模块 NFS部分

共享/webdata/目录;用于存储AppSrv主机的WEB数据;仅允许AppSrv主机访问该共享;考虑安全,不论登入NFS 的使用者身份为何,都将其设置为匿名用户访问。

NXP迅为i.MX8Mmini开发板Linix固件编译下

4 编译 Ubuntu20 桌面版本 1 如果大家想要编译 Ubuntu20 桌面版本,首先要将光盘资料“iTOP-i.MX8MM 开发板\01-i.MX8MM 开发板光盘资料\20210830\07-Ubuntu20 系统源码\Ubuntu20 桌面版本” 下的压缩包拷贝到 Linux 源码的根目录下,解压压缩包得到 ubunt…

Linix(CentOS6.5)详细安装

CentOS6.5的安装(Minimal) 点击CentOS6镜像文件下载 点击CentOS7镜像文件下载 1.点击创建新的虚拟机 2.选择自定义模式 3.选择VMware Workstation的版本 4.选择稍后安装 5.选择合适操作系统(64位OR32位) 6.更改默认的安装…

Linix环境搭建及概述

linux环境搭建及概述 前言 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果直接不想搭建,也可以直接买一台学习用用!废话不多说直接开整 一、安装CentOS(虚拟机安装…

Linux系统常用命令--LInix系统随笔(四)

前言:虽然一直在用linux但是一直没有系统的学习过,趁着暑假花了几天看着鸟哥的书学习了一下。下面是我记录的一些笔记,本人属于入门的小白所以难免有不足之处,还望发现的表哥们多多指正。 ①命令格式与目录处理命令ls ls--list…

util-linix 实用程序包中包含了许多系统管理员常用的其它命令

util-linix 实用程序包中包含了许多系统管理员常用的其它命令。这些实用程序是由 Linux 内核组织发布的,这 107 条命令中几乎每一个都来自原本是三个单独的集合 —— fileutils、shellutils 和 textutils,2003 年它们被合并成一个包:util-lin…

LINIX 通过进程号查端口、通过端口查进程号

可以通过 netstat -nlp|grep pid或port,来查询端口、进程号 1.通过进程查PORT 2.通过PORT查进程 netstat命令参数说明 n 直接使用ip地址,而不通过域名服务器 -l 显示监控中的服务器的 Socket -p 显示正在使用 Socket 的程序识别码和程序名称

Linu X

LINU X 基本命令 / 根目录 几个盘几个根目录 dev 设备目录 boot 启动文件 etc 配置目录 home 家目录 用户1.管理员 2.一般用户 proc硬件信息 【benlocalhost desktop]#管理员 管理员 主机名 当前目录 $普通用户 cd 修改,进入当前目录 ls显示当前目录下的项目 ll显示…