Kafka的副本策略——《Learning Apache Kafka》学习笔记(原书第三章第4节)

在学习Kafka的副本策略之前,首先回顾一下Kafkad的消息分片策略。

在Kafka中,消息的分片策略在kafka的broker服务器端应用,而如何将消息分片是由producer负责,broker只是将消息以相同的到达顺序进行存储。每个topic的分片数量可以在Kafka的broker端设置。

Kafka副本策略是其0.8版本之后的一个重要的特性。虽然Kafka是高可扩展的,为了消息达到更好的持久性以及Kafka集群的高可用性,即便是存在broker因各种原因造成宕机,副本策略仍保证了消息在被发布和消费时的可靠性。Kafka中的producer和consumer都是“副本感知(replication-aware)”的。下图展示的是kafka中的副本策略。


一个消息的每个分片可拥有n个副本,能够容忍n-1次失败来保证消息的交付。在n个分片中,其中一个作为 leader角色,其余n-1个作为follower角色。Zookeeper中保存着leader副本的信息,以及当前follower的ISR(in-sync replicas)同步副本。Leader中保存着所有ISR的follower列表。每个副本将它的消息及offset保存在它的本地log中并定期同步到磁盘。这个过程同时也保证了一条消息要么被写所有副本,要么不写。

 

Kafka支持下列副本模式:

1.      Synchronous replication(同步模式).在该模式中,一个producer首先从zookeeper中识别leader所在位置,并且向其发布消息。当消息发布完成,它被写入leader的日志中,而其他follower将从leader处“拉”副本数据。由于采用的单隧道,因此消息的到达顺序是有序的。每个follower在写各自本地日志后,向leader发送一个确认信息。一旦所有副本写入完成以及leader收到所有的确认信息,leader向producer发送一个确认信息。在consumer,所有的拉数据动作都是从leader处开始。

2.      Asynchronous replication(异步模式).该模式中与同步模式唯一的不同是,当leader写本地日志后,它立即向producer发送一个确认信息,而不必等其他的follower都完成拉取和确认。但是,该模式并不保证当有broker发生宕机时消息的可靠性。

 

当任何一个follower在一个设定的时间内发生失败时,leader将其从ISR列表里删除,写副本的操作将在ISR列表中未失败的follower上进行。当失败的follower重启之后,它首先截取到上一个checkpoint位置,然后从leader日志的相同checkpoint位置处之后拉取所有的消息。当该follower与leader都同步之后,leader将其加入当前ISR列表中。

当leader失败时(当写本地日志时,或者在发送确认信息给producer时),消息的分片会被重新发送到一个新的leader broker。选举新leader的过程只涉及之前的leader在zookeeper中注册的ISR列表中包含的所有follower,选举策略是将最先注册的follower本成为leader。每个follower都向zookeeper监听来随时获取新leader的消息。当新leader选举后,所有follower从上个确认信息处截断,然后从新leader处同步信息。而新leader会一直等待所有存活的follower同步完成,然后将它们写入当前的 ISR列表中并发送给Zookeeper,然后再开启消息的读写操作。

 

Kafka的副本策略保证了它更强的持久性和高可用性,保证了任何成功发布的消息,在有broker宕机时,不会丢失并且被消费。

 

--转载请注明出处--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值