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
相关推荐
苍煜7 小时前
分布式事务生产实战选型对比
分布式
JAVA面经实录9179 小时前
企业级java+LangChain4j-RAG系统 限流熔断降级
java·开发语言·分布式·langchain
冷小鱼11 小时前
消息队列(MQ)技术全景科普:从选型到AI+未来
人工智能·kafka·rabbitmq·rocketmq·mq·pulsar
YaBingSec14 小时前
玄机网络安全靶场:Hadoop YARN ResourceManager 未授权 RCE WP
大数据·数据库·hadoop·redis·笔记·分布式·web安全
空中海15 小时前
第六篇:可靠性篇 — Sentinel 熔断限流与 Seata 分布式事务
分布式·sentinel
rustfs15 小时前
MinIO 国产平替,RustFS 发布 Beta 版本啦
分布式·docker·云原生·rust·开源
Mr_sst16 小时前
文件上传并发控制:为什么选Redisson可过期信号量?(避坑指南)
网络·数据库·redis·分布式·安全架构
深念Y17 小时前
当加密遇见分布式:Web3、去中心化与元宇宙的底层逻辑
分布式·web3·去中心化·区块链·元宇宙·加密·价值
运维老司机17 小时前
Kafka 单节点部署(Docker Compose + 数据持久化)
分布式·docker·kafka
byoass17 小时前
企业云盘全文检索实战:Elasticsearch集成与分布式搜索
网络·分布式·安全·elasticsearch·云计算·全文检索