kafka replication
复制(replication)是分布式系统中常用的保证数据可靠性服务可靠性的方案,一般数据会写入到 leader节点,leader将数据按顺序复制给follower,如果leader故障,则follower会重新选举出新的leader, 新的leader因为有复制的数据,可以对外继续提供服务。
例如raft、zookeper、mysql、redis等都使用了复制。
kafka,同样也使用复制保证数据可靠性,在创建topic时可以指定topic的replica数量,即副本数量,topic中每个partition都包含了1个leader和replicas-1个(即0个或多个)follower。
follower会向leader发送FetchMessage请求来同步消息,consumer同样也使用这个接口来拉取消息消费。
当leader故障,切换到follower时,为了避免follower因为同步慢,没有同步到leader节点上的数据,导致数据丢失, kafka定义了一个in sync replica(简称ISR)的概念,表示一个replica副本是in sync处于同步状态。
如何判断一个follower是不是in sync replica呢?是通过最近follower拉取消息的时间(replica.lag