基本概念
- Leader 副本:所有的读写请求都由leader副本处理
- Follower副本:follower副本仅仅是从Leader副本处把数据拉取到本地之后,同步更新到自己的Log日志中。
- Topic&分区:Topic是用于存储消息的逻辑概念。每个Topic可以划分成多个分区(每个Topic都至少有一个分区),同一Topic下的不同分区包含的消息是不同的。
ISR(In-Sync Replica)集合:表示的是目前可用且消息量与Leader相差不多的副本集合。
ISR集合中的副本必须满足下面两个条件:
(1):副本所在节点必须维持着与zookeeper的连接。
(2):副本最后一条消息的offset与Leader副本的最后一条消息的offset之间的差值不能超过指定的阀值。
(3):当Follower副本追上(即最后一条消息的offset的差值小于指定阀值)Leader副本的时候,此Follower副本会被Leader副本重新加入到ISR中。HW(High Watermark) 与ISR集合紧密相关。HW标记了一个特殊的offset,当消费者处理消息的时候,只能拉取到HW之前的消息,HW之后的消息对消费者来说是不可见的。与ISR集合类似,HW也是由Leader副本管理的。当ISR集合中全部的Follower副本都拉取HW指定消息进行同步后,Leader副本会递增HW的值。
LEO(Log End Offset)是所有的副本都会有的一个offset标记,它指向追加到当前副本的最后一个消息的offset。当生产者向Leader副本追加消息的时候,Leader副本的LEO标记会递增;当Follower副本成功从Leader副本拉取消息并更新到本地的时候,Follower副本的LEO就会增加。
1.Poducer向此Partition推送消息 2.Leader副本将消息追加到Log中,并递增其LEO 3.Follower副本从Leader副本拉取消息并进行同步 4.Follower副本将拉取到的消息更新到本地Log中,并递增其LEO 5.当ISR集合中所有副本都完成了对offset消息的同步,Leader副本会递增HW
参考:《Apache Kafka 源码剖析》