前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【年后跳槽必看篇-非广告】Kafka核心知识点-第四章

【年后跳槽必看篇-非广告】Kafka核心知识点-第四章

原创
作者头像
@派大星
发布2024-01-31 09:41:37
1891
发布2024-01-31 09:41:37
举报
文章被收录于专栏:码上遇见你码上遇见你

Kafka高水位了解吗,为什么Kafka需要Leader Epoch

什么是Kafka的高水位

所谓高水位(HW,High Watermark)是Kafka中一个重要的概念,主要是用于管理消费者的进度和保证数据的可靠性。

高水位标识了一个特定的消息偏移量(offset),即一个分区中已经提交消息的最高偏移量(offset)【已提交指的是ISRs中的所有副本都记录了这条信息】,消费者只能拉去到这个offset之前的消息。消费者可以通过跟踪高水位来确定自己的消费位置

Kafka高水位的作用

在Kafka中,高水位(HW)主要有一下两个作用:

  1. 消费者进度管理:消费者可以通过记录上一次消费的偏移量,然后将其与分区的高水位进行比较,来确定自己的消费进度。消费者可以在高水位对比之后继续消费新的消息,确保不会错过任何已提交的消息。这样,消费者可以按照自己的节奏进行消费,不受其他消费者的影响
  2. 数据的可靠性:高水位还可用于保证数据的可靠性。在Kafka中,只有消息被写入主副本(Leader Replica)并被所有同步副本(In Sync Replicas ,ISR)确认后,才被认为是已提交的消息。高水位表示已经被提交的消息边界。之后高水位之前的消息才能被认为时已经被确认的,其它消息可能会因为副本故障或其他原因而丢失

在Kafka中还有一个概念,叫做LEO(Log End Offset),它是日志最后的消息偏移量。他表示当前日志文件中下一条待写入消息的offset。

当消费者消费消息时,它可以使用高水位作为参照点,之消费高水位之前的消息,以确保消费的时已经被确认的消息,从而保证数据的可靠性。如下图,只消费offset为6之前的消息。

什么是Leader Epoch

在Kafka中,每个分区都有一个Leader副本和多个Follewer副本。当Leader副本发生故障时,Kafka会选择一个新的Leader副本。这个切换过程中,需要保证数据的一致性,即新的Leader副本必须具有和旧的Leader副本一样的消息顺序。

  • 为了实现这个目标,Kafka引入了Leader Epoch的概念。Leader Epoch是一个递增的整数,每次副本切换时都会增加。它用于标识每个Leader副本的任期。
  • 同时,每个副本都会为会自己的Leader Epoch记录。它记录副本所属的分区在不同Leader副本之间切换时的任期。
  • 在副本切换过程中,新的Leader会检查旧Leader副本的Leader Epoch和高水位。只有当旧Leader和Leader Epoch小于等于Leader副本的Leader Epoch,并且旧Leader副本的高水位小于等于新Leader副本的高水位时,新Leader副本才会接受旧Leader副本的数据
  • 通过Leader Epoch和高水位的验证,Kafka可以避免新的Leader副本接收旧Leader副本之后的消息,从而避免数据回滚。只有那些在旧Leader副本的Leader Epoch和高水位之前的消息才会被Leader副本接受。

Kafka Leader Epoch的过程

每个Partition都有一个初始的leader Epoch,通常为0;当Leader副本发生故障时或者需要进行切换时,Kafka会触发副本切换的过程;副本切换过程中,Kafka会从ISR(In-Sync Replicas,同步副本)中选择一个新的Follower副本作为新的Leader副本;新的Leader副本会增加自己的Leader Epoch,使其大于之前的Leader Epoch。这表示进入了一个新的任期;新的Leader副本会验证旧Leader副本的状态以确保数据一致性的问题。它会检查旧Leader的Leader Epoch和高水位;如果旧Leader副本的Leader Epoch小于等于新Leader副本的Leader Epoch,并且Leader副本的高水位小于等于新Leader副本的高水位,则验证通过;一旦验证通过,新的Leader副本会开始从ISR中的一部分副本复制数据,以确保新Leader上的数据与旧Leader一致;一旦新的Leader副本复制了旧Leader副本的所有数据,并达到了与旧Leader副本相同的高水位,副本切换过程就完成了。

Kafka的ISR机制

ISR,就是In-Sync Replicas 同步副本的意思。

在Kafka中,每个Topic、Partition可以有多个副本(replica)。ISR是与主副本(Leader Replica)保持同步的副本集合。ISR机制就是用于确保数据的可靠性和一致性。

当消息被写入Kafka的分区时,它首先会被写入Leader,然后Leader将消息复制给ISR中的所有副本。只有当ISR中所有副本都成功地接收到并确认了消息后,主副本才会认为消息已经成功提交。这种机制确保了数据可靠性和一致性

了解ISR的列表维护了解嘛

在Kafka中,ISR(In-Sync Replicas)列表的维护是通过副本状态和配置参数来进行的。具体的ISR列表维护机制在不同的Kafka版本中有所变化。

0.9.x版本之前

在0.9.x之前的版本,Kafka有一个核心的参数:replica.lag.max.messages,表示如果Follower落后Leader的消息数量超过了这个参数值,就认为Follower就会从ISR列表里移除。

但是,基于replica.lag.max.message这种实现,在瞬间高并发访问的情况下会有问题:比如Leader瞬间接收到几万条消息,然后所有Follower还没来得及同步过去,此时所有follower都会被踢出ISR列表。

0.9.x版本之后

Kafka从0.9.x版本之后,引入了replica.lag.max.ms参数,表示如果某个Follower的LEO(latest end offset)一直落后Leader超过了10秒,那么才会被ISR列表移除。

这样的话,即使出现瞬间流量,导致Follower落后很多数据,但是只要在限定的时间内尽快追上来就行了。

好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kafka高水位了解吗,为什么Kafka需要Leader Epoch
    • 什么是Kafka的高水位
      • Kafka高水位的作用
      • 什么是Leader Epoch
      • Kafka Leader Epoch的过程
      • Kafka的ISR机制
      • 了解ISR的列表维护了解嘛
        • 0.9.x版本之前
          • 0.9.x版本之后
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档