Kafka 副本机制

  • 副本
  • 副本角色
  • Read-your-writes
  • 单调读
  • ISR
  • Unclean 领导者选举


副本机制 (Replication , 备份机制) : 分布式系统在多台网络互联的机器上保存有相同的数据拷贝

副本机制好处 :

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

Kafka 只享受了:数据冗余实现高可用性,高持久性

副本

副本 (Replica) : 一个只能追加写消息的提交日志

  • 主题分区的副本都散落在不同的 Broker

kafka server与client版本 kafka服务端与客户端_hdfs

副本角色

基于领导者 (Leader-based) 的副本机制的工作原理 :

kafka server与client版本 kafka服务端与客户端_java_02

副本分两类:

  • 领导者副本 (Leader Replica) : 接收所有的读写请求
  • 追随者副本 (Follower Replica) : 不对外提供服务,只从领导者副本异步拉取消息,并写入到提交日志中,从而实现与领导者副本的同步
  • 当领导者副本 Broker 挂了,Kafka 利用 ZK 监控通知,并进行新一轮的领导者选举,从追随者副本中选出新的领导者
  • 老 Leader 副本重启后,只能当追随者副本加入集群中

Kafka 的副本机制的好处 :

  • Read-your-writes : 快速请求消费
  • 单调读 (Monotonic Reads) : 易实现单调读一致性

Read-your-writes

Read-your-writes :生产者向 Kafka 成功写入消息后,立刻用消费者读取刚才生产的消息

  • 如 : 当追随者副本对外提供服务,由于副本同步是异步的,所以很可能有追随者副本还没从领导者副本拉取到最新的消息,从而使客户端看不到最新消息

单调读

单调读 :多次消费消息时,不会出现某条消息一会存在一会不存在

  • 当追随者副本 (F1/F2) 提供读服务,若 F1 拉到 Leader 最新消息 ,而 F2 没及时拉取:第一次消费时能见最新消息,第二次消费时不能见
  • 所有读请求都由 Leader 处理,那 Kafka 就很容易实现单调读一致性

ISR

In-sync Replicas (ISR 副本集合 ) : ISR 中的副本都与 Leader 同步的副本

  • 不在 ISR 中的追随者副本 : 不与 Leader 同步
  • 当追随者副本追上 Leader 的进度,就重新回到 ISR

追随者副本与 Leader 同步的条件 :

  • replica.lag.time.max.ms (默认10 秒) : Follower 副本能落后 Leader 副本的最长时间间隔

kafka server与client版本 kafka服务端与客户端_分布式_03

Unclean 领导者选举

CAP 理论 : 满足一致性(Consistency)、可用性(Availability)、分区容错性 (Partition tolerance)

Unclean 领导者选举 : 决定了是否用非同步副本 (不在 ISR) 进行 Leader 选举

建议禁止Unclean :

  • unclean.leader.election.enable : 控制 Unclean 领导者选举
  • 开启 Unclean 领导者选举 : 可能会数据丢失,但分区 Leader 副本会一直在,不会停止对外提供服务,提升高可用性 : AP
  • 禁止 Unclean 领导者选举 : 维护数据的一致性,避免消息丢失,但牺牲了高可用性 :CP