当前位置: 首页 > news >正文

Kafka中的 ISR 机制

ISR 是什么

ISR 的全称叫做: In-Sync Replicas (同步副本集), 可以理解为和 leader 保持同步的所有副本的集合。ISR 动态维护了一个和 leader 副本保持同步副本集合,ISR 中的副本全部都和 leader 的数据保持同步。

设一个场景,有6个分区集合,分别为 [0,1,2,3,4,5],其中 leader-replica 是 0

其中 [1,2,3] 作为 follower 和 leader 的数据保持同步,而 [4,5] 未能和 leader 保持同步,那么此时,ISR=[0,1,2,3],OSR=[4,5]

如果此时副本 4 追上了 leader-replica,也就是和 leader 保持到了同步,那么此时,ISR=[0,1,2,3,4],OSR=[5]

ISR 的作用

我们知道了与 leader 保持同步的副本集后,可以做到哪些事情?

  • 当我们生产消息的时候,到底要写入多少副本才能算成功呢?
  • 当 leader 挂了之后,我们应该选择哪个 follower 来成为新的 leader 呢?

通过 ISR 就可以知晓了哪些 follower 与 leader 保持着同步,在写入消息的时候,设置写入处于 ISR 中所有的副本才算成功,在进行 leader 切换的时候,就可以从 ISR 中选择对应的 follower 成为新的 leader。

ISR 的作用是通过副本机制实现消息高可靠,服务高可用时,不可缺少的一环;这也是为什么讲到副本不得不提到 ISR 的原因。

总结

  • ISR 机制通过副本冗余机制,提供了 kafka 消息的高可靠性。
  • ISR 机制可以做到故障转移,保障服务的可用性。
  • ISR 平衡了主从架构下,复制方案的选择(同步 / 异步 / 少数服从多数),让使用者根据参数自行选择。

为什么要设计 ISR 机制

在一些中间件中,都有副本的概念,不同场景下写入数据时,要求写入副本的个数也不尽相同。例如 zk 中要求写入的节点个数大于一半才算成功,或者有些要求高可靠性的场景,规定写入所有副本才能算成功。

而 kafka 的 ISR 可以允许生产消息时,根据自己的业务场景自行配置 ACK 确认机制达到想要的效果:

  • acks=0:生产者发了就算完了,后续成不成功我都不管,这种设置下消息的高可靠性几乎没有保障,但是却有着极大的吞吐量
  • acks=1:消息写入主节点就算成功,这种设置,可以保障一定的高可靠性,也具有不错的吞吐量
  • acks=-1或all:消息必须写入 ISR 中所有的副本才算成功,这种设置下,就能提供较高的高可靠性,但是吞吐量就相对较低

ISR 虽然是动态伸缩的,可能会出现 follower 全部都挂了的情况,如果 ISR 中只剩下 leader,那么此时设置 acks=all 就等价于 acks=1 了。这样就会对高可靠性要求的场景产生危险。

kafka 提供了 min.insync.replicas 参数配置,这个参数可以配置最少 ISR 中需要多少个副本,才能继续提供写服务。如果设置为 2,一旦 ISR 中的个数小于 2,那么就不再提供写服务,牺牲一定的可用性,来保障这种高可靠的场景需求。

总结

ISR 机制的存在是 kafka 为了平衡可靠性和可用性,不指定提供高可靠或者高可用的服务,而是将决定权交给了使用者,让使用者通过参数来控制,到底要实现什么程度的高可靠与高可用。

相关文章:

Kafka中的 ISR 机制

ISR 是什么 ISR 的全称叫做: In-Sync Replicas (同步副本集), 可以理解为和 leader 保持同步的所有副本的集合。ISR 动态维护了一个和 leader 副本保持同步副本集合,ISR 中的副本全部都和 leader 的数据保持同步。 设一个场景&a…...

01 Python 网络爬虫:爬虫技术的核心原理

不夸张地说,现在哪怕是初中生,只要花点儿时间、精力稍微按「网络爬虫」的开发步骤学习了解一下,也能把它玩得贼溜。 听起来感觉是很高大上的东西,但实际上并不复杂,也就是使用了某种编程语言按照一定步骤、规则主动通…...

【Rust】Rust学习 第十四章进一步认识 Cargo 和 Crates.io

本章会讨论 Cargo 其他一些更为高级的功能,我们将展示如何: 使用发布配置来自定义构建将库发布到 crates.io使用工作空间来组织更大的项目从 crates.io 安装二进制文件使用自定义的命令来扩展 Cargo Cargo 的功能不止本章所介绍的,关于其全…...

Android性能优化----执行时间优化

作者:lu人皆知 在APP做启动优化时,Application会做一些初始化的工作,但不要在Application中做耗时操作,然而有些初始化工作可能是很耗时的,那怎么办?初始化操作可以开启子线程来完成。 计算执行时间 常规…...

基于Python的微博大数据舆情分析,舆论情感分析可视化系统,可作为Python毕业设计

运行效果图 基于Python的微博大数据舆情分析,舆论情感分析可视化系统 系统介绍 微博舆情分析系统,项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 先后进行了数据获取和筛选存储,对存储后的数据库数据进行提取分析处…...

被迫学习一波Linux命令

事情起因 部署一个服务,人家说了最低配置是3G,我没当回事,拿着个2G的服务器直接就上了,结果,哈哈,都能猜到结果:服务器内存爆了!!!而且最可气的是服务器还登…...

字符串变量拼接操作的底层原理

在java中,字符串变量拼接操作使用的是StringBuilder或StringBuffer类,这两个类都是可变的字符串缓冲区。java中的字符串是不可变的,因此在进行字符串拼接时需要使用可变的字符串缓冲区,以避免不必要的内存分配和复制。具体来说&am…...

Wlan安全——认证与加密方式(WPA/WPA2)

目录 终端认证技术 WEP认证 PSK认证 802.1x认证与MAC认证 Portal认证 数据加密技术 WEP加密 TKIP加密 CCMP加密 TKIP和CCMP生成密钥所需要的密钥信息 802.11安全标准 WEP共享密钥认证、加密工作原理 WEP共享密钥认证 WEP加解密过程 PSK认证以及生成动态密钥的工…...

Leetcode-每日一题【剑指 Offer 31. 栈的压入、弹出序列】

题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列&#xf…...

软件需求-架构师之路(五)

软件需求 软件需求: 指用户 对系统在功能、行为、性能、设计约束等方面的期望。 分为 需求开发 和 需求管理 两大过程。 需求开发: 需求获取需求分析需求定义(需求规格说明书)需求验证:拉客户一起评审&#xff0c…...

Python自带的IDLE有什么用

在Python的官方解释器中,自带了一个名为IDLE(Interactive DeveLopment Environment)的集成开发环境。 一、简化代码调试过程 很多初学者在编写Python代码时,经常会遇到一些问题需要调试。而在IDLE中,我们可以通过设置断点、单步调试等方法&…...

设计模式之简单工厂模式

一、概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。 简单工厂模式:又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。 二、适用性 1.当一个类不知道它所必须…...

从SaaS到RPA,没有真正“完美”的解决方案!

众所周知,SaaS行业越来越卷,利润也越来越“薄”,这是传统软件厂商的悲哀,也是未来数字化行业不得不面对的冷峻现状之一。 随着基于aPaaS、低代码的解决方案之流行,SaaS行业变得越来越没有技术门槛,IT人员的…...

miniconda克隆arcpy

arcpy环境克隆 前言尝试思考到此结束 前言 最近遇到了一些问题,需要用到arcpy来处理一些东西,但众所周知,arcgis的arcpy是python 2.0的,我不是很喜欢;所以我安装了arcgis pro 2.8,我发现这也是个坑&#x…...

一万字关于java数据结构堆的讲解,让你从入门到精通

目录 java类和接口总览 队列(Queue) 1. 概念 2. 队列的使用 以下是一些常用的队列操作: 1.入队操作 2.出队操作 3.判断队列是否为空 4.获取队列大小 5.其它 优先级队列(堆) 1. 优先级队列概念 Java中的PriorityQueue具有以下特点 2.常用的PriorityQue…...

Java集合底层源码剖析-ArrayList和LinkedList

文章目录 ArrayList基本原理优缺点核心方法的原理数组扩容以及元素拷贝LinkedList基本原理优缺点双向链表数据结构插入元素的原理获取元素的原理删除元素的原理Vector和Stack栈数据结构的源码剖析ArrayList 基本原理 ArrayList是Java中的一个非常常用的数据结构,它实现了Lis…...

【数据分享】2006-2021年我国城市级别的市政公用设施建设固定资产投资相关指标(30多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国城市级别的市政设施水平相关指标(可查看之前的文章获悉详情&#xff…...

学点Selenium玩点新鲜~,让分布式测试有更多玩法

前 言 我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具,而 Selenium Grid 是 Selenium 中的一大组件,通过它能够实现分布式测试,能够帮助团队简单快速在不同的环境中测试他们的 Web 应用。 分布式执行测试其实并不是一…...

【SpringBoot学习笔记】04. Thymeleaf模板引擎

模板引擎 所有的html元素都可以被thymeleaf替换接管 th:元素名 templates下的只能通过Controller来跳转,templates前后端分离,需要模板引擎thymeleaf支持 模板引擎的作用就是我们来写一个页面模板,比如有些值呢,是动态的&#x…...

【uni-app】 .sync修饰符与$emit(update:xxx)实现数据双向绑定

最近在看uni-app文档,看到.sync修饰符的时候,觉得很有必要记录一下 其实uni-app是一个基于Vue.js和微信小程序开发框架的跨平台开发工具 所以经常会听到这样的说法,只要你会vue,uni-app就不难上手 在看文档的过程中,发…...

Confluence数据迁移踩坑实录:从物理机到K8s集群,我是如何无损迁移200G知识库的?

Confluence企业级数据迁移实战:从物理架构到Kubernetes的无缝过渡 当企业知识库规模突破200GB时,迁移不再是简单的备份还原操作。去年我们团队将一个运行7年的Confluence实例从老旧物理服务器迁移到Kubernetes集群,期间经历了数据库崩溃、文件…...

如何应对论文AIGC检测算法升级?2026实测5大降AI工具(附优缺点)

最近看了一些行业报告,AI工具在写作方面的普及率真的已经超乎想象了。 很多大学生在写论文时也都习惯用AI来辅助寻找灵感、提高效率。 与此同时,相关部门针对人工智能写作出台了一系列规定,各大学术检测平台也都在不断升级AIGC检测算法。 现…...

如何通过抖店订单接口实现订单状态管理与履约自动化?

对于电商业务管理系统的开发者而言,订单状态的管理是电商履约流程中最核心的环节。当消费者在抖音小店完成下单后,订单会经历支付、发货、收货等多个状态阶段,每个阶段都需要系统做出相应的业务响应。抖店开放平台提供的订单接口体系&#xf…...

突破传统命令行限制:PortProxyGUI如何重塑Windows网络配置体验

突破传统命令行限制:PortProxyGUI如何重塑Windows网络配置体验 【免费下载链接】PortProxyGUI A manager of netsh interface portproxy which is to evaluate TCP/IP port redirect on windows. 项目地址: https://gitcode.com/gh_mirrors/po/PortProxyGUI …...

工业物联网实战启示:从14万亿预测看价值闭环与组织变革

1. 从一份价值14万亿美元的预测报告中,我们能学到什么?最近在整理一些行业旧闻时,翻到了2015年EE Times上的一篇老文章,讲的是埃森哲(Accenture)对工业物联网(Industrial IoT, IIoT)…...

JPlag:源代码相似性检测与抄袭识别的核心技术解析

JPlag:源代码相似性检测与抄袭识别的核心技术解析 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag JPlag是一…...

AndroidOfferKiller深度解析:JVM运行时数据区域面试重点

AndroidOfferKiller深度解析:JVM运行时数据区域面试重点 【免费下载链接】AndroidOfferKiller :muscle: Help you get a better offer. 项目地址: https://gitcode.com/gh_mirrors/an/AndroidOfferKiller 想要在Android面试中脱颖而出吗?掌握JVM运…...

DeepSeek-R1大模型微调实战:从LoRA原理到完整项目部署指南

1. 项目概述:一个面向开发者的开源大模型微调项目最近在开源社区里,一个名为FareedKhan-dev/train-deepseek-r1的项目引起了我的注意。乍一看,这只是一个托管在代码托管平台上的仓库,但如果你像我一样,在过去几年里深度…...

第13天:常用数据结构之字典

Python学习100天(从入门到精通系列文章) 文章目录 Python学习100天(从入门到精通系列文章) 前言 一、为什么需要字典? 1.1 列表、元组、集合的局限性 1.2 字典的优势 二、创建和使用字典 2.1 使用字面量语法创建字典 2.2 使用 dict 函数创建字典 三、字典的常用操作 3.1 访…...

基于MCP协议与本地全文检索的电子元件文档AI查询系统

1. 项目概述:为LLM构建一个本地化的电子元件文档搜索引擎如果你是一名嵌入式工程师、硬件开发者,或者像我一样,经常需要和德州仪器(TI)、意法半导体(ST)、亚德诺(ADI)这些…...