面试官:Leader崩溃Follower不够新怎么办?

简介: 面试官:Leader崩溃Follower不够新怎么办?

这是一道非常经典的 Kafka 问题,是关于 Leader 在“异常”情况下的选举问题。

背景

我们知道 Kafka 中的 Partition(分区)是存储消息的最终介质,但 Partition 又有两种分类:

  1. Leader Partition:主分区,负责数据写入和读取。
  2. Follower Partition:副本分区,用于数据备份和主节点宕机之后的分区选举,保证了 Kafka 服务的高可用。

如下图所示:
image.png
其中,Leader Partition 是用来处理生产者和消费者请求的,而 Follower Partition 是用来保证 Kafka 集群的高可用的,也就是当 Leader Partition 宕机之后,会通过某种算法将其中一个 Follower Partition 升级为 Leader Partition 继续运行。

不同步的 Follower 节点

在分布式系统下,数据一致性问题是一个令人头疼的问题,那么这个问题在 Kafka Leader Partition 和 Follower Partition 中也存在,例如以下场景:
image.png
也就是说,Follower Partition 还未从 Leader Partition 中同步到最新的数据,Leader Partition 就突然宕机了,这就产生了不同的 Follower 节点了。

小知识点:数据一致性问题是指在一个系统中,不同部分的数据在逻辑上应该保持一致,但实际情况却出现了矛盾或不匹配的现象。

那问题来了,如果有不同步的 Follower Partition 要升级为 Leader 会发生什么问题?

升级 VS 不升级

当出现不同步的 Follower Partition,而 Leader Partition 有意外宕机的场景,此时我们有两种选择:

  1. 将不同步的 Follower 节点升级为 Leader 节点:但这样就会造成数据丢失的问题,但好处是此时集群可以继续运行。
  2. 不同步的 Follower 不自动升级 Leader 节点:等待原 Leader 恢复再继续运行,此时不会导致数据丢失,但可能要等待很久才能恢复 Kafka 服务的正常运行,因为 Leader 宕机可能要更新内存芯片之后才能运行,而这个时间是比较久的。

所以,不同步的 Follower 节点是升级为 Leader 或不升级为 Leader 都有其优点和缺点。

使用者的选择权

而在这种情况下,Kafka 就把这个选择权给使用者了,此时我们可以通过配置 Broker(或集群)的“unclean.leader.election.enable”属性来决定到底要不要升级不同步的 Follower 节点为 Leader 节点,这个属性有以下两个值可以设置:

  1. true:如果此属性设置为 true,那么即使是不完全同步的 Follower Partition 也会升级为 Leader,此时牺牲了一定的数据一致性(数据丢失风险),保证了 Kafka 服务的高可用。
  2. false:如果此属性设置为 false,就表示不会将不完全同步的 Follower Partition 升级为 Leader,会等待原 Leader 重新上线之后才能继续运行 Kafka 服务。此时保证了数据的一致性,但牺牲了 Kafka 服务的可用性。

    unclean.leader.election.enable 的默认值为 true。

因此,如果是对数据丢失不敏感的系统可以使用 unclean.leader.election.enable=true,如果对数据丢失敏感的,例如银行系统等可以使用 unclean.leader.election.enable=false 保证数据的一致性。

课后思考

说说 Follower 升级为 Leader 的选举算法和执行流程?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

相关文章
|
5月前
|
消息中间件 Kafka 程序员
Kafka内幕:详解Leader选举与副本同步的那些事儿
大家好,我是小米,今天给大家带来一篇关于 Kafka 核心机制的深度解析文章。本文将详细讲解 Kafka 的 Leader 选举、副本消息同步以及相关概念 LEO 和 HW,帮助大家更好地理解和应用 Kafka,提升处理分布式系统的能力。快来一起学习吧!
583 0
|
NoSQL Redis
Redis集群选举原理分析
Redis集群选举原理分析
129 0
|
存储 Kubernetes 前端开发
2023年如何成为一名优秀的大前端Leader?
2023年如何成为一名优秀的大前端Leader?
137 0
|
监控 NoSQL 算法
从哨兵Leader选举学习Raft协议实现(上)
从哨兵Leader选举学习Raft协议实现(上)
102 0
|
Sentinel
从哨兵Leader选举学习Raft协议实现(下)(一)
从哨兵Leader选举学习Raft协议实现(下)
58 0
|
NoSQL Redis Sentinel
从哨兵Leader选举学习Raft协议实现(下)(二)
从哨兵Leader选举学习Raft协议实现(下)
58 0
Zookeeper Leader选举机制
Zookeeper Leader选举机制
86 0
|
算法 Java 数据处理
不是我吓唬你,写不出这种代码,那就等着被leader开除吧
这种代码,对于我们自己练习编程或者解决一个算法题,当然没有问题。但是如果是在一个工程中,尤其是几十上百人维护了几年的工程中,还使用这种写法,倾泻自己天马行空的才华,保证leader不打死你哦。 所以,对于代码的整洁性,可读性,自古以来就有很多大神做出过总结,比如这本《clean code》,中文名叫做《代码整洁之道》,今天,我们就来看看吧。
|
消息中间件 存储 RocketMQ
源码分析RocketMQ多副本之Leader选主
源码分析RocketMQ多副本之Leader选主
源码分析RocketMQ多副本之Leader选主
|
程序员 信息无障碍
面试官:说一说Zookeeper中Leader选举机制
本文为大家介绍Zookeeper中Leader选举机制。
146 0
面试官:说一说Zookeeper中Leader选举机制

热门文章

最新文章