一.副本机制(Repliaction)
指分布式系统在多台网络互联的机器上保存相同的数据拷贝
- 提供数据冗余:即使系统部分组件失效,系统依然能够继续运转,因而增加整体可用性以及数据持久性。
- 提供高伸缩性:支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。
- 改善数据局部性:允许将数据放入到与用户地理位置相近的地方,从而降低系统延时。
对于Apache Kafka而言,目前只能享受到副本机制带来第一个好处。
- 数据冗余实现高可用性和高持久性
二.副本定义
- Kafka是有主题概念的,每个主题又进一步划分成若干个分区
- 副本的概念实际上是在分区层级上定义的,每个分区配置若干个副本。
- 分区下只有副本概念,有Leader副本和follower副本
三.副本角色
如何确保副本中所有数据是一致的:
基于领导者(Leader-based)副本机制
- kafka中,副本分为:领导者副本(Leader Replication)和追随者副本(Follower Replication)
- 每个分区在创建时都要选举一个副本,称为领导者副本,其余副本自动称为追随者副本。
四.follower副本机制
- kafka副本机制比其他分布式系统要严格,追随者副本是不对外提供服务的,任何一个追随者副本都不能响应消费者和生产者的读写请求,所有请求都必须领导者副本来处理。
- 追随者副本的唯一任务:从领导者副本异步拉去请求,写入自己的提交日志中,实现与领导者副本的同步。
五.leader副本挂掉了
- 领导者副本挂掉,或者领导者副本所在的Broker宕机时,Kafka依托于Zookeeper提供的监控功能能够实时感知到,并立即开启新一轮领导者选举,从追随者副本中选一个作为新的领导者。
- 老Leader副本重启后,只能作为追随者副本加入到集群中。
六.追随者副本为什么不提供服务呢
七.Read-your-writes
- 当使用生产者API向Kafka成功写入消息后,马上使用消费者API实现刚才生产的消息。
- 如果允许副本提供服务,副本同步时异步的,因此可能出现追随者副本还没更新最新消息,导致客户单查不到。
八.单调读(Monotonic Reads)
- 消费者不能出现幻读
- 两个追随者副本,没有同步更新消息,导致消费者组看到的数据不一致
九.In-sync Replicas(ISR)
ISR副本合集:ISR中的副本都是与Leader同步的副本,相反不再ISR中的追随者副本就被认为是与Leader不同步的。
- ISR不只是追随者副本集合,他必然包括Leader副本,甚至ISR只有Leader的一个副本。
- Broker端参数replication.lag.time.max.ms参数值:Follower副本能够落户Leader副本的最常时间间隔,当前默认是10s,少于10s就认为是同步的。
- 大于10s,就会被提出ISR
- 该副本后面慢慢地追上了 Leader 的进度,那么它是能够重新被加回 ISR
十.Unclean领导者选举(Unclean Leader Election)
- kafka把所有不再ISR中存活副本称为非同步副本
- Unclean领导者副本:将这些非同步副本选为新的Leader
- Broker 端参数 unclean.leader.election.enable
开启 Unclean 领导者选举的优势
- 分区 Leader 副本一直存在,不至于停止对外提供服务,因此提升了高可用性
劣势
- 维护了数据的一致性,避免了消息丢失,但牺牲了高可用性
十一.CAP理论
- cap理论:一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)
- 一个分布式系统只能满足CAP三个中的两个。
- kafka赋予选择C和A的权利