所谓的副本机制(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. 4.Azure创建点到站点的***隧道(下)
  2. 邮箱解决任务间资源共享问题
  3. Andriod --- JetPack (一):初识 JetPack
  4. 第四届“传智杯”全国大学生IT技能大赛(决赛B组)【题解】
  5. 深信服C/C++技术一面二面20180924
  6. 部署点评Cat监控项目(转)
  7. Java 和C# 最大的不同是对底层的控制能力不同
  8. linux的java安装目录
  9. 如何实现LBS轨迹回放功能?含多平台实现代码
  10. python11_python11:函数
  11. python灰色关联度分析代码_GRA灰色关联度分析学习 附python代码
  12. 从零开始手写 VIO
  13. Autovue 21.0.2.3 新功能介绍
  14. YOLO中MAP的具体计算
  15. 股票星期几买涨的概率大?
  16. linux nss升级,Linux系统升级
  17. CF22A Second Order Statistics
  18. linux办公文件格式,Linux终端文件类型与颜色
  19. 榜样访谈——董宇航:在俱乐部中收获爱情
  20. 陈延伟:任督二脉之内存管理总结笔记

热门文章

  1. fedora30 桌面图标_Linux桌面上的创新:Fedora 30的新功能
  2. S32K144之时钟配置
  3. 案例研究分析:巴基斯坦 ISP 如何通过黑洞路由关闭 YouTube
  4. 开关电源中变压器初次级线圈之间对EMI的作用(电磁兼容整改)
  5. 用Python做迷你世界
  6. 华为 IoT 认证课程一
  7. HIGH-DIMENSIONAL CONTINUOUS CONTROL USING GENERALIZED ADVANTAGE ESTIMATION翻译
  8. 浅谈一下javascript中的this对象
  9. java获取视频时长(实测可行)
  10. 基于ssm框架的汽车出租管理系统源码