kafka入门(十):副本数据同步

副本

副本(Replica),指的是分布式系统对数据和服务提供的一种冗余方式。

Kafka通过多副本机制实现故障自动转移,在Kafka集群中某个broker节点失效的情况下仍然保证服务可用。

失效副本

在ISR集合之外,也就是处于同步失效或功能失效(比如副本处于非存活状态)的副本统称为失效副本,失效副本对应的分区也就称为同步失效分区,即under-replicated分区。可以通过 kafka-topics.sh 脚本的under-replicated-partitions参数来显示。

怎么判定一个分区是否有副本处于同步失效的状态呢?

通过唯一的broker端参数 replica.lag.time.max.ms 来抉择,当ISR集合中的一个follower副本滞后leader副本的时间超过此参数指定的值时则判定为同步失败,需要将此follower副本剔除出ISR集合。 (注:lag,表示滞后)

一般有两种情况会导致副本失效:(1) follower副本进程卡住,在一段时间内根本没有向leader副本发起同步请求,比如频繁的Full GC。 (2) follower副本进程同步过慢,在一段时间内都无法追赶上leader副本,比如I/O开销过大。

如果只用一个指标来衡量 Kafka,那么同步失效分区(具有失效副本的分区)的个数必然是首选。

ISR伸缩:

kafka检测到 ISR集合中有失效副本时,就会收缩ISR 集合。

随着follower副本不断与leader副本进行消息同步,follower副本的LEO也会逐渐后移,并最终追赶上leader副本,此时该follower副本就有资格进入ISR集合。追赶上leader副本的判定准则是此副本的LEO是否不小于leader副本的HW,注意这里并不是和leader副本的LEO相比。

当ISR集合发生增减时,或者ISR集合中任一副本的LEO发生变化时,都可能会影响整个分区的HW。

follower 副本同步leader副本的数据:

整个消息追加的过程可以概括如下:

(1)生产者客户端发送消息至leader副本(副本1)中。

(2)消息被追加到leader副本的本地日志,并且会更新日志的偏移量。

(3)follower副本(副本2和副本3)向leader副本请求同步数据。

(4)leader副本所在的服务器读取本地日志,并更新对应拉取的follower副本的信息。

(5)leader副本所在的服务器将拉取结果返回给follower副本。

(6)follower副本收到leader副本返回的拉取结果,将消息追加到本地日志中,并更新日志的偏移量信息。

LEO与HW:

follower副本向leader副本拉取消息,在拉取的请求中会带有自身的LEO信息,

leader副本返回给follower副本消息,并且还带有自身的HW信息。

follower副本拉取到消息后,会更新各自的LEO,以及 HW。

leader副本的HW是一个很重要的东西,因为它直接影响了分区数据对消费者的可见性。

kafka入门文章

https://blog.csdn.net/sinat_32502451/category_12465196.html

资料来源

《深入理解Kafka:核心设计与实践原理》

相关推荐
太阳伞下的阿呆2 小时前
kafka高吞吐持久化方案(2)
分布式·kafka·高并发·重入锁
Chasing__Dreams9 小时前
kafka--基础知识点--19--消息重复
分布式·kafka
import_random1 天前
[kafka]伪集群搭建,各个节点配置文件中listeners参数的配置
kafka
Mr.朱鹏2 天前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
山沐与山2 天前
【MQ】Kafka与RocketMQ深度对比
分布式·kafka·rocketmq
yumgpkpm2 天前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
树下水月2 天前
Easyoole 使用rdkafka 进行kafka的创建topic创建 删除 以及数据发布 订阅
分布式·kafka
Cat God 0072 天前
基于Docker搭建kafka集群
docker·容器·kafka
Cat God 0072 天前
基于 Docker 部署 Kafka(KRaft + SASL/PLAIN 认证)
docker·容器·kafka