一.副本机制(Repliaction)

指分布式系统在多台网络互联的机器上保存相同的数据拷贝

  • 提供数据冗余:即使系统部分组件失效,系统依然能够继续运转,因而增加整体可用性以及数据持久性。
  • 提供高伸缩性:支持横向扩展,能够通过增加机器的方式来提升读性能,进而提高读操作吞吐量。
  • 改善数据局部性:允许将数据放入到与用户地理位置相近的地方,从而降低系统延时。

对于Apache Kafka而言,目前只能享受到副本机制带来第一个好处。

  • 数据冗余实现高可用性和高持久性

二.副本定义

  • Kafka是有主题概念的,每个主题又进一步划分成若干个分区
  • 副本的概念实际上是在分区层级上定义的,每个分区配置若干个副本。
  • 分区下只有副本概念,有Leader副本和follower副本

三.副本角色

如何确保副本中所有数据是一致的:

基于领导者(Leader-based)副本机制

Kafka 核心技术与实战学习笔记(二十三)kafka副本机制_java

  • 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的权利