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:核心设计与实践原理》

你可能感兴趣的:(A1--kafka,kafka)