一、ISR 是什么

首先,ISR 的全称叫做: In-Sync Replicas (同步副本集), 我们可以理解为和 leader 保持同步的所有副本的集合。
一个分区的所有副本集合叫做 AR( Assigned Repllicas )
与 leader-replica 未能保持同步的副本集叫做 OSR( Out-Sync Relipcas )
因此我们就能得到这么一个表示:AR = ISR + OSR,翻译一下就是一个分区的副本集分为同步集合和非同步集合两部分。
那么我们可以假设一个场景,一个分区的 AR 集合为【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 副本保持同步副本集合,ISR 中的副本全部都和 leader 的数据保持同步。

二、ISR 的作用是什么

我们思考一下,我们知道了与 leader 保持同步的副本集后,可以做到哪些事情?
1、当我们生产消息的时候,到底要写入多少副本才能算成功呢?
2、当 leader 挂了之后,我们应该选择哪个 follower 来成为新的 leader 呢?
那么对应的,通过 ISR,我们知晓了哪些 follower 与 leader 保持着同步,
那么我们就可以在写入消息的时候,设置写入处于 ISR 中所有的副本才算成功,
那么我们在进行 leader 切换的时候,就可以从 ISR 中选择对应的 follower 成为新的 leader。
这就是 ISR 的作用:是通过副本机制实现消息高可靠,服务高可用时,不可缺少的一环;这也是为什么讲到副本不得不提到 ISR 的原因。

三、为什么要设计 ISR 机制

在一些中间件中,都有副本的概念,在不同的场景下写入数据时,要求写入副本的个数也不尽相同。
例如 zk 中要求写入的节点个数大于一半才算成功,或者有些要求高可靠性的场景,规定写入所有副本才能算成功。
而 kafka 的 ISR 可以允许生产消息时,根据自己的业务场景自行配置想要达到的效果:
acks=0:fire and forget,也就是我发了就算完了,后续成不成功我都不管,这种设置下消息的高可靠性几乎没有保障,但是有极大的吞吐量。
acks=1:写入主节点就算成功,这种设置,可以保障一定的高可靠性,也具有不错的吞吐量。
acks=all:也就是写入 ISR 中所有的副本才算成功,这种设置下,就能提供较高的高可靠性,但是吞吐量就相对较低。
我们在考虑生产消息时,ISR 机制可以友好的让使用者根据自己的业务需求去设置参数,去选择自己想要达到什么程度的可靠性,而不是只提供一种可靠性选择。

补充:我们的 ISR 是动态伸缩的,可能出现 follower 全部都挂了,ISR 中只剩下 leader,那么此时设置 acks=all 就等价于 acks=1 了
这样就会对高可靠性要求的场景产生危险,那么 kafka 提供了参数:min.insync.replicas
这个参数可以配置最少 ISR 中需要多少个副本,才能继续提供写服务。如果设置为 2,一旦 ISR 中的个数小于 2,那么就不再提供写服务,牺牲一定的可用性,来保障这种高可靠的场景需求。

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

Kafka的 ISR 概念和作用相关推荐

  1. I·See·Right 遇见kafka的ISR

    ​目录 1.kafka霸道性能之揭开日志底层存储的面纱 2.HW?LEO?你俩一起搞事情? 3.ISR机制底层如何设计? 这是2020年的第一篇文章,新的开始,与君共勉.前文小白简单的去剖析了肌霸先生 ...

  2. 海边的卡夫卡之 - kafka的基本概念以及Api使用

    海边的卡夫卡之 - kafka的基本概念以及Api使用 kafka的应用以及与其他MQ的对比 关于kafka的介绍,也许没有人能比官网更具有话语权,所以这里可以参考官网了解一下kafka:Kafka介 ...

  3. 爬虫基础(一)之概念、作用、分类和流程

    爬虫基础(一)之概念.作用.分类和流程 1. 爬虫的概念 模拟浏览器,发送请求,获取响应        浏览器相当于客户端 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端(如网易云音乐)(主要 ...

  4. 细说进程、应用程序域与上下文之间的关系(一)——进程的概念与作用

    引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作. 虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提 ...

  5. (常用API)正则表达式的概念和作用

    正则表达式的概念 正则表达式(英语:Regular Expression,在代码中常简写为regex). 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字 ...

  6. java 常用流_Java流类图结构: 流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数...

    Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观 ...

  7. Spring4.x(2)--SpringIOC的概念和作用

    SpringIOC的概念和作用 一.什么是IOC? Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着 ...

  8. java day57【 Spring 概述 、 IoC 的概念和作用、使用 spring 的 IOC 解决程序耦合 】...

    第1章 Spring 概述 1.1 spring 概述[了解] 1.1.1 spring 是什么 1.1.2 Spring 的发展历程 1.1.3 spring 的优势 1.1.4 spring 的体 ...

  9. 数字证书的概念以及作用

    1.1 数字证书的概念以及作用      数字证书又称为数字标识,是标志网络用户身份信息的一系列数据.它提供了一种在互联网上身份验证的方式,是用来标志和证明网络通信双方身份的数字信息文件.通俗地讲,数 ...

最新文章

  1. 「 每日一练,快乐水题 」2016. 增量元素之间的最大差值
  2. v4l2视频采集摄像头
  3. 现在的编程语言越来越多,为什么 C 和 C++ 还没有被现在的时代淘汰呢?
  4. c语言清空文件内容_C 语言清空输入缓冲区的几个手段
  5. pwnable.tw startorw
  6. DevOpsSOP 基于阿里云VPC搭建Storm+Kafka+Zookeeper集群
  7. 【渝粤教育】国家开放大学2019年春季 1067知识产权法 参考试题
  8. Disk Drill Enterprise for Mac(数据恢复软件)
  9. 数据仓库中OLTP和OLAP的区别
  10. myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
  11. 并发(二)——linux内核同步机制分析
  12. LeetCode 翻转字符串里的单词
  13. Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector 论文翻译
  14. 学习A-level课程能申请哪些国家
  15. 未转变者服务器买车指令,未转变者3.X服务器控制台命令大全_快吧单机游戏
  16. Columns函数:返回数据表区域的总列数。
  17. Tensorflow 从bin文件中读取数据并
  18. HDOJ 1846 Brave Game(巴士博弈)
  19. CarSim与多版本MATLAB联合仿真问题
  20. atom写css,Atom编写Markdown

热门文章

  1. EntityManager的find()与getReference()的区别
  2. iphon44s图片的缩放
  3. 记录Java Steam流的一些用法
  4. 把握人性的弱点——正确处理人际关系
  5. nodejs代码保护方式--加密、混淆、编译、打包成exe
  6. web前端:波浪舞动开机动画loading,原生css、js,@keyframes应用
  7. JS逆向 | ob混淆一键还原工具
  8. CSDN日报20170615 ——《11 年高考结束到 17 年日本修士的心路历程》
  9. python学习笔记之word文档提取
  10. 第一章 开启安卓之路