kafka副本同步机制

kafka的复制机制,既不是单纯的同步复制,也不是单纯的异步复制。同步复制要求所有的follower都复制完,这条消息才会被commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,数据只要被leader写入log就认为已经commit,这种情况下,如果follower都还没有复制完,落后于leader时,突然leader宕机,则会丢失数据。kafka使用ISR的方式,这种方式能够很好的均衡数据不丢失以及吞吐率。

ISR全称是In-Sync Replicas,表示副本同步队列。所有的副本统称为Assigned Replicas,简写为AR。ISR是AR的一个子集,由leader维护ISR列表。

follower副本的任务,就是从leader副本拉取消息,如果拉取速度持续慢于leader副本写入速度,当落后时间超过阈值时,leader会把此follower剔除出ISR,存入OSR列表。此阈值是一个服务端配置项replica.lag.time.max.ms,默认是10000,即10s。从2.5.0版本开始,默认值是30s。假如后面follower副本慢慢赶上来,则又会重新加入ISR。新加入的follower也会先存放在OSR中。AR=ISR+OSR。

lag是落后的意思,所以replica.lag.time.max.ms可以翻译为副本最大落后时间。

LEO和HW

LEO全称是log end offset,是日志偏移量,每个副本都有一个LEO。

HW全称是high watermark,是ISR各副本中最小的LEO,只有offset小于HW的消息才能被消费组消费,offset大于HW的,在ISR间还未同步,不能被消费。

 

posted on 2019-11-26 18:44  koushr  阅读(153)  评论(0编辑  收藏  举报

导航