问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Kafka ISR机制详解!

创作时间:
作者:
@小白创作中心

Kafka ISR机制详解!

引用
1
来源
1.
https://developer.aliyun.com/article/1619256

Kafka的高可用性和高可靠性与它的ISR机制密切相关。ISR机制通过副本冗余机制,提供了Kafka消息的高可靠性,做到故障转移,保障服务的可用性。本文将详解Kafka的ISR机制,包括其定义、作用、原理、实例分析以及优缺点。

什么是 ISR机制?

ISR的全称叫做In-Sync Replicas(同步副本集),ISR动态维护了一个和Leader副本保持同步的副本集合,ISR中的副本全部都和Leader的数据保持同步。

ISR机制通过副本冗余机制,提供了Kafka消息的高可靠性,做到故障转移,保障服务的可用性。ISR平衡了主从架构下,复制方案的选择(同步/异步/少数服从多数),让使用者根据参数自行选择。

ISR的作用

ISR的作用主要体现在以下几个方面:

生产消息时的ACK确认机制

当我们生产消息的时候,到底要写入多少副本才能算成功呢?通过ISR就可以知晓了哪些Follower与Leader保持着同步,在写入消息的时候,设置写入处于ISR中所有的副本才算成功。Kafka提供了以下几种ACK确认机制:

  • acks=0

生产者不等待服务器的确认,消息发送后即认为成功,不管消息是否真正写入Kafka,这种方式效率最高,但可靠性最低,数据可能存在丢失。

  • acks=1

生产者会等待来自Leader分区的确认。Leader分区接收到消息并写入本地日志后即返回确认。这种方式在Leader分区可用时可靠,但如果Leader分区发生故障,可能会丢失数据。从Kafka 2.0开始,默认值是acks=1。

  • acks=all(或-1)

生产者等待所有ISR(In-Sync Replica,同步副本)分区的确认。只有当消息被写入所有同步副本后才返回确认,这种方式最可靠,但性能较低。

Leader选举

当Leader挂了之后,我们应该选择哪个Follower来成为新的Leader呢?从ISR中选择对应的Follower成为新的Leader。

最小ISR副本数配置

Kafka提供了min.insync.replicas参数配置,这个参数可以配置最少ISR中需要多少个副本,才能继续提供写服务。如果设置为2,一旦ISR中的个数小于2,那么就不再提供写服务,牺牲一定的可用性,来保障这种高可靠的场景需求。

ISR的原理

ISR机制的实现原理如下:

  1. Leader维护ISR
    Leader负责维护ISR,当一个Follower赶上了Leader的进度,Leader会把它加入到ISR中;当一个Follower长时间未赶上Leader,或者主动退出同步,Leader会把它从ISR中移除,变成OSR(Out-of-Sync Replicas)。

  2. 生产者发送消息
    生产者发送消息给Leader,Leader会把消息append到本地log,并且复制给ISR中的所有Follower。

  3. 消息提交
    当ISR中的所有Follower都完成了复制,Leader会更新HW(High Watermark,最高提交偏移量),此时消息才算真正提交。

  4. 消费者消费消息
    消费者只能消费提交的消息,即位于HW之前的消息。

  5. Follower同步数据
    Follower定期主动从Leader拉取数据,保持与Leader的同步。当Follower死机或长时间未同步时,会被从ISR中移除。

  6. Leader选举
    当Leader所在的broker失效时,ISR中的其他Follower会选出一个新的Leader。选举规则是:选择ISR中最新的Follower。

实例分析

为了更好地理解ISR机制,我们通过一个示例来讲解。

假设一个Kafka集群中有一个Topic test,该Topic有一个分区partition-0,该分区有3个副本,分别在Broker 1、Broker 2和Broker 3上。

  • 在初始状态时:
    Leader副本:Broker 1
    Follower副本:Broker 2, Broker 3
    所有的副本都工作良好,所以ISR集合为:[Broker 1, Broker 2, Broker 3]

  • 假如Broker 2失效:
    Broker 2从ISR集合中移除,因此,ISR集合变成了:[Broker 1, Broker 3]

  • 接着Broker 1也失效了:
    Broker 3被选为新的Leader,SR集合变成了:[Broker 3]

  • 再然后,Broker 2恢复:
    Broker 2开始从Broker 3复制数据,Broker 2追上Broker 3后,重新加入ISR集合,因此,ISR集合变成了:[Broker 2, Broker 3]

ISR的优缺点

ISR机制的优点:

  • 提供了消息的高可靠性,即使部分副本失效,只要ISR中还有副本存活,消息就不会丢失。
  • 支持故障转移,当Leader失效时,ISR中的Follower可以顺利接替成为新的Leader,提高了系统的可用性。
  • 通过ACK机制,生产者可以根据自己的需求,在可靠性和吞吐量之间进行权衡。

ISR机制的缺点:

  • 同步复制会增加消息发送的延迟,因为生产者需要等待所有ISR中的副本完成复制。
  • ISR中的副本越多,消息发送的延迟就越高。
  • ISR中的副本数量受限于min.insync.replicas参数,如果副本数量低于该值,就无法提供写服务,会降低系统的可用性。

总结

ISR机制是Kafka实现高可靠性和高可用性的关键所在,它通过动态维护一个和Leader保持同步的副本集合,为消息的可靠性提供了保证。同时,ISR机制还支持故障转移,当Leader失效时,ISR中的Follower可以顺利接替成为新的Leader。

不过,ISR机制也存在一些缺点,比如会增加消息发送的延迟,并且ISR中的副本数量受限于min.insync.replicas参数。因此,在使用ISR机制时,需要根据实际的业务需求,在可靠性、可用性和吞吐量之间进行权衡。

总的来说,ISR机制是Kafka实现高可靠性和高可用性的一个重要机制,它的出现大大提高了Kafka的实用性,使其成为了大数据领域广泛使用的消息队列系统。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号