Kafka的AR
Kafka的内部维护了一个AR列表,其中,AR由ISR和OSR两部分组成。
ISR
ISR中的副本都要同步leader中的数据,副本同步队列,只有都同步完成了数据才认为是成功提交了,成功提交之后的消息才能被访问和消费。在这个同步的过程中,即使消息已经写入也不能被外界访问,这个过程是通过LEO-HW机制来实现的。
OSR
OSR中的follower会尽力的去同步leader,可能数据版本会落后于ISR,OSR内的副本是否完全同步了leader的数据,不影响数据的提交。
最开始所有的副本都在ISR中,在kafka工作的过程中,如果某副本同步速度慢于replica.lag.time.max.ms中配置的阈值,就被踢出ISR存入OSR,如果后续速度恢复可以回到ISR中。
LEO
LogEndOffset,分区的最新的数据的offset,当有新的数据写入leader后,LEO会立刻将标记为置为最新数据。
HW
HighWatermark,只有当写入的数据,被ISR中所有的成员都同步,才认为该数据已提交,HW更新到该位置,消费者只能访问HW位置之前的数据,保证没有同步完成数据不会被消费者访问到。
ISR、OSR、LEO、HW这些信息都被保存在Zookeeper中。
Kafka文件存储机制
Kafka中消息是以topic进行分类的,生产者通过topic向Kafka brok