Kafka内幕:详解Leader选举与副本同步的那些事儿

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 大家好,我是小米,今天给大家带来一篇关于 Kafka 核心机制的深度解析文章。本文将详细讲解 Kafka 的 Leader 选举、副本消息同步以及相关概念 LEO 和 HW,帮助大家更好地理解和应用 Kafka,提升处理分布式系统的能力。快来一起学习吧!

大家好,我是小米,一个29岁,热爱分享技术的小米,今天我们来聊聊 Kafka 的一些核心概念和机制,尤其是关于 Leader 选举和副本消息同步。对于正在或者即将使用 Kafka 的小伙伴们来说,这些知识点不仅能帮助你们更好地理解 Kafka 的内部工作原理,还能提升你们在面对 Kafka 相关问题时的解决能力。让我们一起来看看吧!

Leader 选举

Kafka 的 Leader 选举机制是确保消息高可用性和一致性的关键之一。当某个 Broker 失效时,Kafka 会选举新的 Leader 来继续提供服务。接下来,我们逐条解析 Leader 选举的工作原理。

  • ISR 集合是 Kafka 维护副本同步状态的关键。每个 Topic 的每个分区都有一个 ISR 集合,这个集合中的副本与 Leader 副本保持同步。ISR 集合记录在 Zookeeper 上,Kafka 通过 Zookeeper 来管理和协调这些状态信息。
  • Kafka 只有在确保所有 ISR 中的副本都已经同步了 Leader 中的消息后,才会认为这些消息是已提交的。这一机制确保了消息的高可靠性,避免了消息丢失或数据不一致的问题。
  • 当 Leader 发生故障时,Kafka 会从 ISR 集合中选举新的 Leader。只有那些与原 Leader 保持同步的 Follower 副本才有资格被选作新的 Leader。这一规则确保了新的 Leader 能够快速接管并继续提供一致性的服务。
  • 为了确保高可用性,Kafka 采用多副本机制。假设一个 Topic 有 N+1 个副本,那么 Kafka 可以容忍最多 N 个服务器不可用。这意味着,即使有 N 个副本出现故障,Kafka 仍然能够通过剩余的副本继续提供服务。这一特性大大提高了系统的容错能力。
  • 如果 ISR 中的副本都丢失了,则:
  • 当 ISR 中的所有副本都丢失时,Kafka 可以选择等待这些副本中的任何一个恢复。一旦有副本恢复并重新加入 ISR 集合,Kafka 就可以继续对外提供服务。虽然这一过程中需要等待一定的时间,但能够确保数据的一致性和完整性。
  • 如果等待时间过长,Kafka 也可以从 OSR(out-of-sync replica)集合中选出一个副本作为新的 Leader 副本。然而,这一过程中可能会导致数据丢失,因为 OSR 中的副本没有与 Leader 保持同步。这是一个权衡可用性和一致性的问题,需要根据具体场景进行选择。

副本消息同步

副本消息同步是确保 Kafka 数据一致性和高可用性的核心机制之一。下面,我们详细解析副本消息同步的过程。

首先,Follower 副本会发送 FETCH 请求给 Leader。Leader 收到请求后,会读取底层日志文件中的消息数据,并更新其内存中的 Follower 副本的 LEO(log end offset)值。LEO 值记录了该副本日志中下一条消息的位移值。然后,Leader 尝试更新分区的高水位值(HW)。

Follower 收到 FETCH 响应后,会将消息写入底层日志文件,并更新其 LEO 和 HW 值。LEO 表示日志末端位移,记录了该副本中下一条消息的位移值;HW 表示水位值,记录了已备份的消息位移。

LEO 和 HW

  • LEO(log end offset):,即日志末端位移,记录了该副本日志中下一条消息的位移值。举个例子,如果某个副本的 LEO=10,那么表示该副本保存了10条消息,其位移值范围是[0, 9]。
  • HW(high watermark):即水位值,记录了已备份的消息位移值。对于同一个副本对象,其 HW 值不会大于 LEO 值。小于等于 HW 值的所有消息都被认为是“已备份”的(replicated)。这一概念确保了数据的一致性,即只有被所有副本备份的消息才会被认为是已提交的。

通过以上机制,Kafka 确保了消息的高可用性和一致性。即使在某些副本失效的情况下,Kafka 仍能通过 ISR 和 HW 等机制来保障数据的可靠性。

END

通过本文的讲解,相信大家对 Kafka 的 Leader 选举、副本消息同步以及相关概念 LEO 和 HW 有了更深入的理解。Kafka 作为一个分布式流处理平台,其高可用性和一致性是其核心优势。希望这些知识点能帮助你们更好地使用 Kafka,解决在实际应用中遇到的问题。

如果你觉得本文对你有帮助,欢迎点赞、分享给更多小伙伴。小米会继续为大家带来更多 Kafka 相关的技术干货,敬请期待!如果你有任何疑问或想了解更多内容,欢迎在评论区留言,我们一起探讨交流。

感谢大家的阅读,我们下次再见!

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号软件求生,获取更多技术干货!

相关文章
|
1月前
|
消息中间件 分布式计算 算法
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
44 5
大数据-63 Kafka 高级特性 分区 副本机制 宕机恢复 Leader选举
|
1月前
|
消息中间件 JSON 大数据
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
大数据-65 Kafka 高级特性 分区 Broker自动再平衡 ISR 副本 宕机恢复再重平衡 实测
61 4
|
1月前
|
消息中间件 SQL 分布式计算
大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
21 2
|
3月前
|
消息中间件 Kafka 测试技术
【Kafka揭秘】Leader选举大揭秘!如何打造一个不丢失消息的强大Kafka集群?
【8月更文挑战第24天】Apache Kafka是一款高性能分布式消息系统,利用分区机制支持数据并行处理。每个分区含一个Leader处理所有读写请求,并可有多个副本确保数据安全与容错。关键的Leader选举机制保障了系统的高可用性和数据一致性。选举发生于分区创建、Leader故障或被手动移除时。Kafka提供多种选举策略:内嵌机制自动选择最新数据副本为新Leader;Unclean选举快速恢复服务但可能丢失数据;Delayed Unclean选举则避免短暂故障下的Unclean选举;Preferred选举允许基于性能或地理位置偏好指定特定副本为首选Leader。
68 5
|
4月前
|
消息中间件 存储 监控
深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制
深入理解Kafka核心设计及原理(六):Controller选举机制,分区副本leader选举机制,再均衡机制
93 1
|
3月前
|
消息中间件 Java Kafka
Kafka生产者同步和异步的JavaAPI代码演示
Kafka生产者同步和异步的JavaAPI代码演示
42 0
|
4月前
|
消息中间件 算法 NoSQL
面试题Kafka问题之Kafka保证系统的可用性如何解决
面试题Kafka问题之Kafka保证系统的可用性如何解决
41 0
|
29天前
|
消息中间件 存储 运维
为什么说Kafka还不是完美的实时数据通道
【10月更文挑战第19天】Kafka 虽然作为数据通道被广泛应用,但在实时性、数据一致性、性能及管理方面存在局限。数据延迟受消息堆积和分区再平衡影响;数据一致性难以达到恰好一次;性能瓶颈在于网络和磁盘I/O;管理复杂性涉及集群配置与版本升级。
|
1月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
44 1
|
3月前
|
消息中间件 Java Kafka
Kafka不重复消费的终极秘籍!解锁幂等性、偏移量、去重神器,让你的数据流稳如老狗,告别数据混乱时代!
【8月更文挑战第24天】Apache Kafka作为一款领先的分布式流处理平台,凭借其卓越的高吞吐量与低延迟特性,在大数据处理领域中占据重要地位。然而,在利用Kafka进行数据处理时,如何有效避免重复消费成为众多开发者关注的焦点。本文深入探讨了Kafka中可能出现重复消费的原因,并提出了四种实用的解决方案:利用消息偏移量手动控制消费进度;启用幂等性生产者确保消息不被重复发送;在消费者端实施去重机制;以及借助Kafka的事务支持实现精确的一次性处理。通过这些方法,开发者可根据不同的应用场景灵活选择最适合的策略,从而保障数据处理的准确性和一致性。
258 9