所谓的副本机制(Replication),也可以称之为备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝。它的作用主要有以下几点:

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

这些是分布式教科书中对副本作用的定义。但是对Kafka而言,目前只提供第一个作用,也就是提供数据冗余,实现高可用和高持久性。

1. 副本定义

Kafka中的副本(Replica),本质就是一个只能追加写消息的提交日志。同一个分区下的所有副本保存有相同的消息序列,这些副本分散保存在不同的Broker上,从而能够对抗部分Broker宕机带来的数据不可用。

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

2. 副本角色

Kafka采用的是基于领导者(Leader-based)的副本机制。以此来确保同一分区,多个副本下的数据一致性。基于领导者的副本机制的工作原理如下图所示:

  • 在Kafka中,副本分成两类:领导者副本(Leader Replica)和追随者副本(Follower Replica)。每个分区在创建时都要选举一个副本,称为领导者副本,其余副本自动称为追随者副本。
  • Kafka的追随者副本是不提供对外服务的。所有的读写请求都必须发往领导者副本所在的Broker,由该Broker来处理。追随者副本不处理客户端请求,它的唯一任务就是从领导者副本异步拉取消息,并写入到自己的提交日志中,从而实现与领导者副本的同步。
  • 当领导者副本挂掉,或者说领导者副本所在的Broker宕机时,Kafka依托于ZooKeeper提供的监控功能能够实时感知,并立即开启新一轮的领导者选举,从追随者副本中选一个作为领导者。老Leader副本重启回来后,只能作为追随者副本加入到集群中。

3. Kafka副本机制的优点

Kafka副本机制有两个方面的好处:

1 方便实现“Read-your-writes”

所谓 Read-your-writes,顾名思义就是,当你使用生产者 API 向 Kafka 成功写入消息后,马上使用消费者 API 去读取刚才生产的消息。如果允许追随者副本对外提供服务,由于副本同步是异步的,因此有可能出现追随者副本还没有从领导者副本那里拉取到最新的消息,从而使得客户端看不到最新写入的消息。

2 方便实现单调读(Monotonic Reads)

单调读定义:对于一个消费者用户而言,在多次消费消息时,它不会看到某条消息一会儿存在一会儿不存在。

如果允许追随者副本提供读服务,那么假设当前有 2 个追随者副本 F1 和 F2,它们异步地拉取领导者副本数据。倘若 F1 拉取了 Leader 的最新消息而 F2 还未及时拉取,那么,此时如果有一个消费者先从 F1 读取消息之后又从 F2 拉取消息,它可能会看到这样的现象:第一次消费时看到的最新消息在第二次消费时不见了,这就不是单调读一致性。但是,如果所有的读请求都是由 Leader 来处理,那么 Kafka 就很容易实现单调读一致性。

4. In-sync Replicas(ISR)

ISR副本是指与Leader保持同步的副本集合。这个副本集合不只是追随者副本,也(必然)包括Leader副本。甚至在某些情况下,ISR只有Leader副本。

Broker 端参数 replica.lag.time.max.ms 决定一个追随者副本是否在ISR集合中。这个参数的含义是追随者副本落后领导者副本的最长时间间隔。在这个时间间隔内,追随者副本没有做fetch操作,就被视为与领导者副本不同步,从而被踢出ISR集合。

后续倘若该副本的LEO不小于Leader副本的HW时,它会被重新加入到ISR集合中。

这表明,ISR是一个动态调整的集合,而非静止不变的。

生产者写入的一条消息只有被ISR中的所有副本都接收到,才被视为“已提交”状态。由此可见,若ISR分区中有n个副本,那么该分区最多可以忍受n-1个副本崩溃而不丢失已提交的消息。

5. Unclean领导者选举(Unclean Leader Election)

Broker 端参数 unclean.leader.election.enable 控制是否允许 Unclean 领导者选举。当这个参数开启时,Leader副本所在的Broker宕机,且ISR集合为空,就会发生Unclean领导者选举。

  • 开启Unclean领导者选举可能会造成数据丢失,但是好处是,始终会选出新的分区Leader副本,不至于停止对外服务,因此提升了高可用性。
  • 禁止Unclean领导者选举的好处是维护了数据的一致性,避免了消息丢失,但牺牲了高可用性。

强烈建议不要开启Unclean领导者选举,避免数据丢失。

Kafka详解(五)Kafka副本机制相关推荐

  1. Kafka详解(包括kafka集群搭建)

    目录 一.Kafka简介 Kafka是什么 消息系统简介 点对点消息传递模式 发布-订阅消息传递模式 kafka简单理解 Kafka的优点特点 学Kafka的意义何在 二.常用Message Queu ...

  2. kafka详解及集群环境搭建

    一.kafka详解 安装包下载地址:https://download.csdn.net/download/weixin_45894220/87020758 1.1Kafka是什么? 1.Kafka是一 ...

  3. kafka详解(JAVA API操作kafka、kafka原理、kafka监控)-step2

    1.JAVA API操作kafka  修改Windows的Host文件: 目录:C:\Windows\System32\drivers\etc (win10) 内容: 192.168.40.150 k ...

  4. kafka详解 转载

    转自https://blog.csdn.net/lingbo229/article/details/80761778 Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的( ...

  5. 我的世界Java版最大村庄_我的世界19w11a:详解MC全新村庄机制,我已经准备好重开存档了!...

    已经两周没见到JAVA版的快照了,难道Mojang在憋大招么?没错,本周快照19w11a确实是憋了一个大招! 我的世界19w11a:正式版发布不远了!村庄大改完成,全新交易来袭我的世界19w11a:详 ...

  6. PackageManagerService启动详解(五)之Android包信息体和解析器(中)

        PKMS启动详解(五)之Android包信息体和包解析器(中) Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS启动详解(一)之 ...

  7. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

    在Thread中有异常处理器相关的方法 在ThreadGroup中也有相关的异常处理方法 示例 未检查异常 对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行 在主线程中能不能捕获呢? 我 ...

  8. Masonry自动布局详解五:比例(multipliedBy)

    Masonry自动布局详解五:比例(multipliedBy) 标签: iosmasonryautolayout自动布局约束 2015-11-30 16:30 1816人阅读 评论(0) 收藏 举报 ...

  9. 详解数据库的锁机制及原理

    详解数据库的锁机制及原理 1.数据库锁的分类 2.行锁 共享锁(读锁S锁) 排他锁(写锁X锁) 更新锁 3.意向锁(IX/IS锁) 4.锁机制解释数据库隔离级别 5.元数据锁(MDL锁) 6.间隙锁 ...

  10. 详解模板引擎工作机制

    本文讲的是详解模板引擎工作机制, 我已经使用各种模版引擎很久了,现在终于有时间研究一下模版引擎到底是如何工作的了. 简介 简单的说,模版引擎是一种可以用来完成涉及大量文本数据的编程任务的工具.一般而言 ...

最新文章

  1. PowerEdge M915 – 戴尔打出的又一记虚拟化重拳
  2. python3 判断数据类型
  3. windows ce 5.0 + vs2005 + sql数据库_开发注意事项
  4. java 容器 线程_JAVA多线程并发容器
  5. rpmbuile 制作drbd RPM包
  6. 状态机在VHDL中的实现
  7. mysql设置取值范围0到100_mysql中的int smallint 取值范围
  8. 数据上报java_通过Jaeger上报Java应用数据
  9. vue安装jsencrypt_vue使用JSEncrypt实现rsa加密及挂载方法
  10. agx 安装ros opencv_Ubuntu下安装realsense+melodic+OpenCV
  11. 在Mybatis中处理sql中的大于号小于号
  12. [Aaronyang] 写给自己的WPF4.5 笔记10[层次数据需求处理,TreeView绿色文章1/4]
  13. Ext4及F2FS文件系统 Debug
  14. Anylogic学习—银行排队模型
  15. BLP读书摘录和笔记——make
  16. 网页抢东西插件_京东秒杀抢购的小脚本和chorme的一个开发者插件
  17. ssm毕设项目鲲龙装饰公司在线管理系统的设计与开发前台模块iub6h(java+VUE+Mybatis+Maven+Mysql+sprnig)
  18. Databend 源码阅读系列(一): 开篇
  19. Excel房贷计算器
  20. android 锁机代码‘’,android手机锁机txt代码

热门文章

  1. 怎样用matlab打开mat文件
  2. 小米手机关闭自带服务器,米聊2月19号关闭服务器,曾是小米的三驾马车之一。...
  3. 调程序的小女孩(我转我转我转转转)
  4. 为什么有的站点别人能访问但我无法访问
  5. 招标文件和竞争性谈判文件区别
  6. 华为android system,systemui.apk下载
  7. 文献推荐:大区域生态系统服务与社会生态驱动的空间关系——以黄河流域为例
  8. 机器学习笔记之指数族分布——最大熵原理与softmax激活函数的关系
  9. 中式红木装修——一个会呼吸的家
  10. JVM的直接引用和符号引用