大数据-Kafka(九)

                                        大数据-Kafka(九)

kafka内核原理

ISR机制

光是依靠多副本机制能保证Kafka的高可用性,但是能保证数据不丢失吗?

不行,因为如果leader宕机,但是leader的数据还没同步到follower上去,此时即使选举了follower作为新的leader,当时刚才的数据已经丢失了。

ISR是:in-sync replica,就是跟leader partition保持同步的follower partition的数量,只有处于ISR列表中的follower才可以在leader宕机之后被选举为新的leader,因为在这个ISR列表里代表他的数据跟leader是同步的。

如果要保证写入kafka的数据不丢失,首先需要保证ISR中至少有一个follower,其次就是在一条数据写入了leader partition之后,要求必须复制给ISR中所有的follower partition,才能说代表这条数据已提交,绝对不会丢失,这是Kafka给出的承诺。

HW&LEO原理

  • LEO

last end offset,日志末端偏移量,标识当前日志文件中下一条待写入的消息的offset。举一个例子,若LEO=10,那么表示在该副本日志上已经保存了10条消息,位移范围是[0,9]。

  • HW

Highwatermark,俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。任何一个副本对象的HW值一定不大于其LEO值。

小于或等于HW值的所有消息被认为是“已提交的”或“已备份的”。HW它的作用主要是用来判断副本的备份进度。

下图表示一个日志文件,这个日志文件中只有9条消息,第一条消息的offset(LogStartOffset)为0,最有一条消息的offset为8,offset为9的消息使用虚线表示的,代表下一条待写入的消息。日志文件的 HW 为6,表示消费者只能拉取offset在 0 到 5 之间的消息,offset为6的消息对消费者而言是不可见的。

leader持有的HW即为分区的HW,同时leader所在broker还保存了所有follower副本的leo

(1)关系:leader的leo >= follower的leo >= leader保存的follower的leo >= leader的hw >= follower的hw

(2)原理:上面关系反应出各个值的更新逻辑的先后 

LEO的更新机制

注意:follower副本的LEO保存在2个地方。

(1)follower副本所在的broker缓存里。

(2)leader所在broker的缓存里,也就是leader所在broker的缓存上保存了该分区所有副本的LEO。

  • follower更新LEO

(1)follower的leo更新时间

每当follower副本写入一条消息时,leo值会被更新。

(2)leader端的follower副本的leo更新时间

当follower从leader处fetch消息时,leader获取follower的fetch请求中offset参数,更新保存在leader端follower的leo。

  • leader更新LEO

(1)leader本身的leo的更新时间:leader向log写消息时。

更新HW的机制

  • follower更新HW

follower更新HW发生在其更新完LEO后,即follower向log写完数据,它就会尝试更新HW值。具体算法就是比较当前LEO(已更新)与fetch响应中leader的HW值,取两者的小者作为新的HW值。

  • leader更新HW

leader更新HW的时机

(1)producer 向 leader 写消息时
(2)leader 处理 follower 的 fetch 请求时
(3)某副本成为leader时
(4)broker 崩溃导致副本被踢出ISR时

leader更新HW的方式

当尝试确定分区HW时,它会选出所有满足条件的副本,比较它们的LEO(当然也包括leader自己的LEO),并选择最小的LEO值作为HW值。

这里的满足条件主要是指副本要满足以下两个条件之一:

(1)处于ISR中

(2)副本LEO落后于leader LEO的时长不大于replica.lag.time.max.ms参数值(默认值是10秒),或者落后Leader的条数超过预定值replica.lag.max.messages(默认值是4000)。

此博文仅供学习参考,如有错误欢迎指正。

上一篇《大数据-Kafka(八)

下一篇《大数据-Kafka(十)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值