(7)ISR、AR代表什么?ISR伸缩是什么?

2021-02-26  本文已影响0人  hedgehog1112

AR(Assigned Repllicas):分区中所有副本统称

ISR(In-Sync Replicas):与leader副本保持一定程度同步的副本(包括Leader)

OSR(Out-Sync Relipcas):与leader滞后过多副本(不包括leader)ps:参数配置滞后范围

AR=ISR+OSR。正常情况AR=ISR ,OSR空

LEO(LogEndOffse):下一条待写入消息offset,partition的log最后一条消息offset+1。

HW(HighWatermark):consumer能看到partition位置,partition对应ISR中最小LEO为HW。

    HW为6.表示消费者只能拉取到offset0至5之间的消息,而offset为6的消息对消费者而言是不可见的(图2)

LW(LowWatermark):“低水位”,AR中最小logStartOffset,副本拉取请求(FetchRequest,可能触发新建日志分段而旧的被清理,导致logStartoffset增加)和删除请求DeleteRecordRequest都可能促使LW增长

概要:一、ISR 的伸缩性:定期检查是否伸缩、缓存

           二、何时扩充ISR:1)follower追赶上,2)hw保证一致性

           三、同步过程:写leader,再同步

           四、LSO(LastStableOffset)与kafka的事物有关:读提交,读未提交

一、ISR 的伸缩性

1)Leader跟踪维护ISR中follower滞后状态,落后太多或失效时,leade把他们从ISR剔除。2)OSR中follower“追上”Leader,在ISR中才有资格选举leader

Kafka启动开启ISR相关定时任务“isr-expiration"和”isr-change-propagation"

1、isr-expiration:周期性检测 分区是否缩减ISR

    1)“replica.lag.time.max.ms”设置周期,大小是这个参数一半,默认5000ms

    2)检测到ISR有失效副本时,缩减ISR集合,记录到zk对应/brokers/topics//partition//state节点如下:

    {“controller_cpoch":26,“leader”:0,“version”:1,“leader_epoch”:2,“isr”:{0,1}}

     其中controller_epoch:kafka控制器epoch.leader,前分区leader所在broker的idversion版本号(当前半本固定位1),leader_epoch当前分区leader纪元,变更后isr列表

2、isr-change-propagation:周期性(固定2500ms)检查isrChangeSet(记录变更后缓存)

    1)发现变更,在zk的/isr_change_notification创建isr_change开头持久顺序节点存isrChangeSet信息:如/isr_change_notification/isr_change_0000000000 , 

    2)kafka控制器为/isr_change_notification添加Watcher,子节点变化触发Watcher,通知控制器和管理broker节点更新元数据,删除/isr_change_notification下已处理节点。

    3)避免频繁触发Watcher影响控制器、zk、broker性能,检查:上次ISR变化超过5秒,上次写zk超过60秒

二、何时扩充ISR

1、不断同步,follower的LEO后移,追赶上leader判定准侧是follower的LEO是否小于leader副本HW

2、ISR扩充同样更新zk中的/broker/topics//partition//state节点和isrChangeSet,之后和收缩时相同。ISR增减时,或LEO变时,影响整个分区HW。

    如leader的LEO为9,follower的LEO为7,follower2的LEO为6,判定都处于ISR中,分区HW6,如follower2被剥离ISR,HW为leader和follower中LEO最小值为7(木桶原理

3、HW保证一致性

Leader挂了,在新Leader可读HW,即对外可见最大offset,HW=max(replica.offset)

例:新msg,等ISR中replica同步后,更新HW,才消费,保证如Leader fail,仍可从新Leader中获取(配置延迟时间replica.lag.time.max.ms)

ps:内部Broker读,没HW限制。Folloer.HW = min(Leader.HW, Follower.offset)

图2

三、同步过程

ISR中一个leader和两个follower副本,LEO和HW都为3。消息3和4从生产者发出后先存leader

follower1完全leader而follower2只同步消息3,leader、follower1的LEO为5,Follower2的LEO为4HW最小值4,可以消费offset为0-3消息;所有都成功写入3、4,HW和LEO为5,可消费offset为4消息。

四、LSO(LastStableOffset)与kafka的事物有关

配置消费者事务隔离级别:消费端参数——isolation.level(字符串类型)

1、设置消费到位置

1)“read_committed",消费会忽略事务未提交,只能消费到LSO(LastStableOffset)位置

2)默认”read_uncommitted",可消费HW(High Watermak)位置。

    ps:follower事务隔离级别也“read_uncommitted",且不可改

例:开启kafka事务时,生产者发消息1、2到broker,如没有提交事务,isolation.level=read_committed的消费者看不到消息,而isolation.level=read_uncommitted可到。事务中第一条消息位置标记为firstUnstableOffset

2、LSO还影响kafka消费后量

就是kafka,Log,也称kafka堆积量计算。

1)普通情况:Lag = HW-ConsumerOffset

2)引入了事务:read_uncommitted不受影响,read_committed引入LSO计算:

        未完成事务,LSO=事务第一条消息位置(firstUnstableOffset)

        已经完成=HW

结论:LSO≤HW≤LEO

未完成read_committed,Lag=LSO-ComsumerOffset

https://blog.csdn.net/weixin_43975220/article/details/93190906

https://blog.csdn.net/qq_41568597/article/details/82501738

上一篇 下一篇

猜你喜欢

热点阅读