Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

23 | Kafka副本机制详解

开放讨论
小结
Unclean领导者选举(Unclean Leader Election)
In-sync Replicas(ISR)
副本角色
副本定义
副本机制
Apache Kafka的副本机制

该思维导图由 AI 生成,仅供参考

你好,我是胡夕。今天我要和你分享的主题是:Apache Kafka 的副本机制。
所谓的副本机制(Replication),也可以称之为备份机制,通常是指分布式系统在多台网络互联的机器上保存有相同的数据拷贝。副本机制有什么好处呢?
提供数据冗余。即使系统部分组件失效,系统依然能够继续运转,因而增加了整体可用性以及数据持久性。
提供高伸缩性。支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。
改善数据局部性允许将数据放入与用户地理位置相近的地方,从而降低系统延时。
这些优点都是在分布式系统教科书中最常被提及的,但是有些遗憾的是,对于 Apache Kafka 而言,目前只能享受到副本机制带来的第 1 个好处,也就是提供数据冗余实现高可用性和高持久性。我会在这一讲后面的内容中,详细解释 Kafka 没能提供第 2 点和第 3 点好处的原因。
不过即便如此,副本机制依然是 Kafka 设计架构的核心所在,它也是 Kafka 确保系统高可用和消息高持久性的重要基石。

副本定义

在讨论具体的副本机制之前,我们先花一点时间明确一下副本的含义。
我们之前谈到过,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Apache Kafka的副本机制是保证系统高可用和消息高持久性的核心设计。该机制通过In-sync Replicas(ISR)和Unclean领导者选举(Unclean Leader Election)两个关键概念来实现。ISR是指与Leader同步的副本集合,通过replica.lag.time.max.ms参数值来动态调整副本的同步状态,确保数据一致性和系统稳定性。而Unclean领导者选举则是在ISR为空时选择新的Leader副本,开启该选项提升了高可用性但可能导致数据丢失,反之则维护了数据一致性但牺牲了高可用性。这两个概念的灵活运用使得Kafka能够根据实际业务场景选择C或A,即一致性或可用性。文章还提到了社区正在考虑是否允许Follower副本处理客户端消费者发来的请求,以改善云上数据的局部性。总的来说,本文深入解析了Apache Kafka的副本机制及其实现原理,为读者提供了深入了解Kafka技术内幕的机会。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(89)

  • 最新
  • 精选
  • 张三丰
    replica.lag.time.max.ms,感觉老师对这个参数的解释有歧义。 应该是如果leader发现flower超过这个参数所设置的时间没有向它发起fech请求(也就是复制请求),那么leader考虑将这个flower从ISR移除。 而不是连续落后这么长时间

    作者回复: 嗯,是的。你的解释更精准:)

    2021-01-16
    6
    63
  • Mick
    老师,LEO和HW这两个概念不理解,能不能详细说下,谢谢

    作者回复: 一个分区有3个副本,一个leader,2个follower。producer向leader写了10条消息,follower1从leader处拷贝了5条消息,follower2从leader处拷贝了3条消息,那么leader副本的LEO就是10,HW=3;follower1副本的LEO是5。这样说清楚些吗

    2019-08-02
    8
    34
  • 请问一下,producer生产消息ack=all的时候,消息是怎么保证到follower的,因为看到follower是异步拉取数据的,难道是看leader和follower上面的offset吗?

    作者回复: 通过HW机制。leader处的HW要等所有follower LEO都越过了才会前移

    2019-08-01
    4
    34
  • ideal sail
    老师,假设一个分区有5个副本,Broker的min.insync.replicas设置为2,生产者设置acks=all,这时是有2个副本同步了就可以,还是必须是5个副本都同步,他们是什么关系。

    作者回复: Producer端认为消息已经成功提交的条件是:ISR中所有副本都已经保存了该消息,但producer并没有指定ISR中需要几个副本。这就是min.insync.replicas参数的作用。 正常情况下,如果5个副本都在ISR中,那么它们必须都同步才行,但如果4个副本不在ISR中了,不满足min.insync.replicas了,此时broker会抛出异常给producer,告诉producer这条消息无法正确保存

    2019-12-16
    3
    29
  • 咸淡一首诗
    老师,“这个标准就是 Broker 端参数 replica.lag.time.max.ms 参数值。这个参数的含义是 Follower 副本能够落后 Leader 副本的最长时间间隔,当前默认值是 10 秒” 这句话中的最长时间间隔是怎么计算的,以什么时间为基准?

    作者回复: follower从leader拿到消息后会更新一个名为_lastCaughtUpTimeMs的字段。每当要检查follower是否out of ISR时就会用当前时间减去这个字段值去和replica.lag.time.max.ms 比较

    2020-04-07
    3
    20
  • 曹伟雄
    老师你好,有个问题请教一下,麻烦抽空看看,谢谢。 生产环境,因磁盘满了,所有broker宕机了,重启集群后,主题中的部分分区中,有1个副本被踢出ISR集合,只剩下leader副本了。 试了以下几种方法都没有自动加入进来: 1、等了3天后还是没有加入到ISR; 2、然后重启kafka集群; 3、用kafka-reassign-partitions.sh命令重新分配分区; 针对此情况,请问一下有什么办法让它自动加入进来? 或者手工处理加入进来也可以。 有什么命令可以查看follower落后多少吗? 麻烦老师给点建议或解决思路,谢谢。

    作者回复: 试试到ZooKeeper中手动删除/controller节点。这通常都是因为Controller与ZooKeeper状态不同步导致的。 试试这个命令吧: rmr /controller 确保在业务低峰时刻执行这个命令

    2019-12-16
    2
    17
  • 蛮野
    ack=all时候,生产者向leader发送完数据,而副本是异步拉取的,那生产者写入线程要一直阻塞等待吗

    作者回复: 不会阻塞,你可以认为是不断轮询状态

    2019-10-11
    12
  • 李先生
    胡哥:分区选举leader,是通过抢占模式来选举的。如果不开启unclean.leader.election.enable,是只能isr集合中的broker才能竞争吗?这个竞争的过程能具体说下是如何实现的吗?

    作者回复: 目前选举leader的算法很简单,一般是选择AR中第一个处在ISR集合的副本为leader。比如AR的副本顺序是[1,2,3],ISR是[2,3],那么副本2就是leader

    2020-04-13
    3
    9
  • Cv
    生产者acks=all使用异步提交, 如果ISR副本迟迟不能完成从leader的同步, 那么10s过后, 生产者会收到提交失败的回调吗? 还是一直不会有回调

    作者回复: 会的,回调中会包含对应的错误码

    2020-03-13
    2
    9
  • LJK
    老师好,请问ISR中的副本一定可以保证和leader副本的一致性吗?如果有一种情况是某个ISR中副本与leader副本的lag在ISR判断的边界值,这时如果leader副本挂了的话,还是会有数据丢失是吗?谢谢老师

    作者回复: ISR中的follower副本非常有可能与leader不一致的。如果leader挂了,其他follower又都没有保存该消息,那么该消息是可能丢失的。如果你要避免这种情况,设置producer端的acks=all吧

    2019-09-25
    6
    9
收起评论
显示
设置
留言
89
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部