Kafka学习笔记(五)—深入理解Kafka副本机制

一、副本定义

副本(Replica),本质就是一个只能追加写消息的提交日志。同一个分区下的所有副本保存有相同的消息序列,这些副本分散保存在不同的 Broker 上,从而能够对抗部分 Broker 宕机带来的数据不可用

二、副本机制的优点

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

但是实际上Kafka副本机制只能享受1的好处,其余两个并不具备

三、副本角色

在kafka中,正本和副本都称之为副本,但存在leader和follower之分

  • leader副本负责处理数据的读写,而follower副本不处理任何请求,既不能写,也不能读,它唯一的任务就是从leader副本异步拉取消息,并写入到自己的提交日志中,从而实现与领导者副本的同步

  • leader副本和follower副本不可以在同一broker上,这样是为了数据冗余,保证Kafka的高可用。同时Kafka通过相关算法保证Replica是均匀的发布在集群的broker上,这样的状态称为分区平衡

  • 当leader副本所在的broker宕机,Kafka 依托于 ZooKeeper 提供的监控功能能够实时感知到,并立即开启新一轮的领导者选举,从follower副本中选一个作为新的领导者,老 Leader 副本重启回来后,只能作为follower副本加入到集群中

四、Follower不参与读原因

  • Read-your-writes,可以在Kafka写入数据后立马就能读出最新数据
  • 方便实现单调读,不会由于follower参与读导致在用户多次读取数据时,数据一会儿存在,一会儿不存在
  • 同一个topic的已经通过分区的形式负载到不同的broker上,本身就应经降低了leader节点的压力,没必要副本再提供读服务
  • 如果follower参与读,就会引入主从同步延迟的分布式数据一致性问题,会让系统更加复杂
  • follower副本所在broker同时也是其它分区leader副本所在,follower参与读负载可能会影响broker节点其它分区leader副本的性能,就整体而言并没有提升性能。当然像Elasticsearch的复制分片,数据库从节点,Redis从节点都是参与读的

五、副本相关重要概念

  • AR: assigned replicas, 已分配的副本。每个partition都有自己的AR列表,里面存储着这个partition最初分配的所有replica。注意AR列表不会变化,除非增加分区

  • PR(优先replica), AR列表中的第一个replica就是优先replica,而且永远是优先replica。最初,优先replica和leader replica是同一个replica

  • Outof-Sync Replicas(OSR), 与 Leader 数据不同步的 Replica组成

  • In-sync Replicas(ISR), 同步副本。每个partition都有自己的ISR列表。ISR是会根据同步情况动态变化的

  • AR = ISR + OSR

初始状态下,所有的 Replica 都在 ISR 中,但在 Kafka 工作的过程中,由于各种问题(网络、磁盘、内存)可能导致部分 Replica 的同步速度慢于参数“replica.lag.time.max.ms”指定的阈值,一旦出现这种情况,这部分 Replica 会被移出 ISR,降级至 OSR 中

replica.lag.time.max.ms参数:数据类型 long,默认值 10000,这个参数的含义是 Follower 副本能够落后 Leader 副本的最长时间间隔,当前默认值是 10 秒。这就是说,只要一个 Follower 副本落后 Leader 副本的时间不连续超过 10 秒,那么 Kafka 就认为该 Follower 副本与 Leader 是同步的,即使此时 Follower 副本中保存的消息明显少于 Leader 副本中的消息

注意,leader副本和follower副本之间消息位移差值不能作为同步副本的评判标准

一个follower可能会因为同步延迟,导致从ISR中降级到OSR中,如果后面它因为网络状况好转,追上leader,这里不是指位移追上,是指在上面指定的时间间隔能够完成同步。这也表明,ISR 是一个动态调整的集合,而非静态不变的

六、Unclean 领导者选举(Unclean Leader Election)

leader副本是一定存在与ISR中的,如果leader也挂掉,ISR为空,这时OSR中的副本远远落后于leader副本的消息,选举OSR中副本为leader的过程称为Unclean 领导者选举。

Broker 端参数 unclean.leader.election.enable 控制是否允许 Unclean 领导者选举,开启 Unclean 领导者选举可能会造成数据丢失,但好处是,它使得分区 Leader 副本一直存在,不至于停止对外提供服务,因此提升了高可用性。反之,禁止 Unclean 领导者选举的好处在于维护了数据的一致性,避免了消息丢失,但牺牲了高可用性。

根据业务场景决定上述参数配置,一般建议不要开启,毕竟数据一致性相对来说高于可用性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值