kafka(八)——AR、ISR、HW和LEO

概念

AR

bash 复制代码
即Assigned Replicas,分区中所有副本的统称,leader副本+follower副本。

ISR

bash 复制代码
即In-Sync Replicas,同步副本集合,表示当前与主副本保持同步的副本集合。

当主副本故障时,kafka会从ISR中选出新的主副本执行工作。

当从副本因网络延迟、 节点故障等原因导致拉取偏移量落后过多,超出阈值时,主副本会将其从ISR中移除。当从副本恢复同步后,再次将其加入ISR。

主副本持续监控每个从副本的拉取偏移量,将其与自身的最新消息偏移量(LEO)进行比较。若从副本的拉取偏移量与主副本相差不超过一定阈值(由replica.lag.time.max.ms参数控制),则认为该主副本处于同步状态,将其纳入ISR。

OSR

bash 复制代码
即Out-of-Sync Replicas,异步副本集合,表示当前未与主副本保持同步的副本集合。

AR = ISR + OSR

图解:

HW

bash 复制代码
即High Watermark,高水位,标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。

取 partition 对应的 ISR 中 最小的 LEO 作为 HW,消费者最多只能消费到 HW 所在的位置上一条信息。(类似于木桶理论)

图解:

LEO

bash 复制代码
即Log End Offset,日志末尾偏移量,代表当前日志文件中末尾下一条待写消息的 offset。

当生产者向分区中写入消息时,它会将该消息的偏移量记录在LEO中。

消费者从分区中读取消息时,它可以通过LEO来判断是否已经读取了所有的消息。

图解:

流程

  1. 消息写入:将生产的5、6消息存储至Leader副本。
  1. 写入Leader副本成功,Follower副本向Leader副本同步数据。
  1. Follower副本的消费效率不同,HW也随着变化。
  1. 所有生产数据同步成功的情况如下:

总结:

  • Leader副本将数据写至本地磁盘;
  • Leader副本更新LEO;
  • follower副本发送同步数据请求,携带自身的 LEO;
  • leader副本更新本地保存的其它副本的 LEO;
  • leader 副本尝试更新 ISR 列表;
  • leader 副本更新 HW;
  • leader 副本给 follower 副本返回数据,携带 leader 副本的 HW 值;
  • follower 副本接收响应并写入数据,更新自身 LEO;
  • follower 副本更新本地的 HW 值;

副本故障

Leader副本故障

  1. Leader副本与Follower副本数据未同步完成。
  1. Leader副本发生故障,从isr中选出一个新的Leader副本,为保证多个副本之间的数据一致性,其余的Follower会先将各自的log文件高于HW的部分截掉,然后从新的Leader同步数据。

    说明:这种情况下不能保证数据不丢失。

Follower副本故障

follower副本发生故障会被临时踢出ISR,待follower副本恢复后,follower副本会读取本地磁盘上次记录的HW,将log文件高于HW的部分截取掉,从HW开始向leader副本进行同步,等待该follower副本的LEO大于该Partition的HW,即follower副本追上leader副本之后,就可以重新加入ISR。

配置

  • acks(生产者参数)
bash 复制代码
0:生产者发送过来的数据,不需要等数据落盘应答,即不需要Leader副本和Follower副本数据落盘。
1:生产者发送过来的数据,Leader副本收到数据并写入磁盘成功后应答。
-1(all):默认值。生产者发送过来的数据,Leader副本和isr队列里面的所有follower副本收到数据并写入磁盘成功后应答。
  • topic副本数
bash 复制代码
# 默认2副本
default.relication.factor=2
  • 副本同步复制最大延迟时间
bash 复制代码
# 默认30s
replica.lag.time.max.ms=30000
  • 消息提交成功的最小isr的数量
bash 复制代码
# 表示一个topic至少需要多少个副本出于isr中,才认为消息写入成功
# 该值过大,增加数据可靠性,写入性能降低;该值过小,写入速度增加,数据可靠性降低;
min.insync.replicas=2
  • 副本拉取线程数
bash 复制代码
# 默认是1。副本拉取线程数,这个参数占总核数的50%的1/3
num.replica.fetchers=1
相关推荐
初见月16 小时前
ISR机制保障数据一致性
kafka
老陈说编程21 小时前
1. 鸿蒙 (HarmonyOS) 2012 至 2026 年的发展历程
分布式·华为·个人开发·harmonyos·鸿蒙·鸿蒙系统·程序员创富
ly76893 天前
Redis 分布式锁的边界条件:Redlock 争议、锁续期与客户端崩溃后的互斥失效
数据库·redis·分布式·分布式锁·watchdog·redlock
筑梦之路3 天前
docker-compose方式部署kafka集群(Kraft方式)——筑梦之路
docker·容器·kafka
灯澜忆梦3 天前
【minio】#5 | MinIO 分布式部署 + HTTPS 部署
分布式·网络协议·https·对象存储·minio
谢亮_vipxieliang3 天前
Spring Cloud 服务治理入门:注册发现、配置中心、网关限流、熔断降级与分布式一致性方案
分布式·spring·spring cloud
樱花落木兰4 天前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存
ShineWinsu4 天前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
Flynt4 天前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式