目录
1. Kafka可靠性概述
Kafka 中采用了多副本的机制,这是大多数分布式系统中惯用的手法,以此来实现水平扩展、提供容灾能力、提升可用性和可靠性等。
2. 副本剖析
2.1 什么是副本
副本(Replica)是分布式系统中常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。
2.2 副本失效场景
a. follower副本进程卡住,在一段时间内根本没有向leader副本发起同步请求,比如频繁的Full GC。
b. follower副本进程同步过慢,在一段时间内都无法追赶上leader副本,比如I/O开销过大。
c. 如果通过工具增加了副本因子,那么新增加的副本在赶上leader副本之前也都是处于失效状态的。
2.3 数据丢失场景
在某一时刻,B中有2条消息m1和m2,A从B中同步了这两条消息,此时A和B的LEO都为2,同时HW都为1;之后A再向B中发送请求以拉取消息,FetchRequest请求中带上了A的LEO信息,B在收到请求之后更新了自己的HW为2;B中虽然没有更多的消息,但还是在延时一段时间之后返回FetchResponse,并在其中包含了HW信息;最后A根据FetchResponse中的HW信息更新自己的HW为2。
数据丢失场景(part 1)
可以看到整个过程中两者之间的HW同步有一个间隙,在A写入消息m2之后(LEO更新为2)需要再一轮的FetchRequest/FetchResponse才能更新自身的HW为2。如果在这个时候A宕机了,那么