副本
副本(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文章来源:https://www.toymoban.com/news/detail-815952.html
资料来源
《深入理解Kafka:核心设计与实践原理》文章来源地址https://www.toymoban.com/news/detail-815952.html
到了这里,关于kafka入门(十):副本数据同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!