Kafka ISR机制详解!

简介: 本文详细解析了Kafka的ISR(In-Sync Replicas)机制,阐述其工作原理及如何确保消息的高可靠性和高可用性。ISR动态维护与Leader同步的副本集,通过不同ACK确认机制(如acks=0、acks=1、acks=all),平衡可靠性和性能。此外,ISR机制支持故障转移,当Leader失效时,可从ISR中选取新的Leader。文章还包括实例分析,展示了ISR在不同场景下的变化,并讨论了其优缺点,帮助读者更好地理解和应用ISR机制。

嗨,你好呀,我是猿java

Kafka 的高可用性和高可靠性与它的 ISR机制密切相关。那么,什么是 ISR? 它是如何工作的?这篇文章,我们来详解 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,这种方式效率最高,但可靠性最低,数据可能存在丢失。

kafka-ack-0.png

acks=1

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

kafka-ack-1.png

acks=all(或-1)

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

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机制的优点:

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

ISR机制的缺点:

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

总结

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

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

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

交流学习

如果你觉得文章有帮助,请帮忙转发给更多的好友,或关注:猿java,持续输出硬核文章。

目录
相关文章
|
5月前
|
消息中间件 存储 算法
深入了解Kafka的数据持久化机制
深入了解Kafka的数据持久化机制
325 0
|
19小时前
|
消息中间件 Java Kafka
Kafka ACK机制详解!
本文深入剖析了Kafka的ACK机制,涵盖其原理、源码分析及应用场景,并探讨了acks=0、acks=1和acks=all三种级别的优缺点。文中还介绍了ISR(同步副本)的工作原理及其维护机制,帮助读者理解如何在性能与可靠性之间找到最佳平衡。适合希望深入了解Kafka消息传递机制的开发者阅读。
7 0
|
2月前
|
消息中间件 负载均衡 Java
揭秘Kafka背后的秘密!Kafka 架构设计大曝光:深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理及流传输设计的高效率消息系统。其核心特性包括高吞吐量、低延迟及出色的可扩展性。Kafka采用分布式日志模型,支持数据分区与副本,确保数据可靠性和持久性。系统由Producer(消息生产者)、Consumer(消息消费者)及Broker(消息服务器)组成。Kafka支持消费者组,实现数据并行处理,提升整体性能。通过内置的故障恢复机制,即使部分节点失效,系统仍能保持稳定运行。提供的Java示例代码展示了如何使用Kafka进行消息的生产和消费,并演示了故障转移处理过程。
42 3
|
2月前
|
消息中间件 Java Kafka
如何在Kafka分布式环境中保证消息的顺序消费?深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据管道和流处理设计的分布式平台,以其高效的消息发布与订阅功能著称。在分布式环境中确保消息按序消费颇具挑战。本文首先介绍了Kafka通过Topic分区实现消息排序的基本机制,随后详细阐述了几种保证消息顺序性的策略,包括使用单分区Topic、消费者组搭配单分区消费、幂等性生产者以及事务支持等技术手段。最后,通过一个Java示例演示了如何利用Kafka消费者确保消息按序消费的具体实现过程。
72 3
|
2月前
|
消息中间件 负载均衡 Java
"深入Kafka核心:探索高效灵活的Consumer机制,以Java示例展示数据流的优雅消费之道"
【8月更文挑战第10天】在大数据领域,Apache Kafka凭借其出色的性能成为消息传递与流处理的首选工具。Kafka Consumer作为关键组件,负责优雅地从集群中提取并处理数据。它支持消息的负载均衡与容错,通过Consumer Group实现消息的水平扩展。下面通过一个Java示例展示如何启动Consumer并消费数据,同时体现了Kafka Consumer设计的灵活性与高效性,使其成为复杂消费场景的理想选择。
101 4
|
2月前
|
消息中间件 负载均衡 Java
"Kafka核心机制揭秘:深入探索Producer的高效数据发布策略与Java实战应用"
【8月更文挑战第10天】Apache Kafka作为顶级分布式流处理平台,其Producer组件是数据高效发布的引擎。Producer遵循高吞吐、低延迟等设计原则,采用分批发送、异步处理及数据压缩等技术提升性能。它支持按消息键值分区,确保数据有序并实现负载均衡;提供多种确认机制保证可靠性;具备失败重试功能确保消息最终送达。Java示例展示了基本配置与消息发送流程,体现了Producer的强大与灵活性。
59 3
|
3月前
|
消息中间件 存储 监控
深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制
深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制
75 1
|
2月前
|
消息中间件 Java Kafka
SpringBoot Kafka SSL接入点PLAIN机制收发消息
SpringBoot Kafka SSL接入点PLAIN机制收发消息
30 0
|
3月前
|
消息中间件 负载均衡 Kafka
Kafka的ISR和OSR的作用分别是什么
Kafka的ISR和OSR的作用分别是什么
118 3
|
2月前
|
消息中间件 安全 Kafka
Flink与Kafka的终极联盟:揭秘如何在一瞬间切换SASL机制,保护您的数据不受黑客侵袭!
【8月更文挑战第7天】Apache Flink作为高性能流处理框架,在与Kafka集成时确保数据安全至关重要。通过配置`KafkaConsumer`使用SASL机制如SCRAM-SHA-256或PLAIN,可有效防止未授权访问。SCRAM-SHA-256采用强化的身份验证流程提高安全性,而PLAIN机制则相对简单。配置涉及设置`properties`参数,包括指定`sasl.mechanism`、`security.protocol`及JAAS认证信息。合理选择和配置这些参数对于保护Flink应用与Kafka间的数据通信安全至关重要。
43 0