Kafka如何实现高可用?

Kafka是大型架构的必备技能,下面我重点详解Kafka如何实现高可用@mikechen

Kafka高可用

Kafka通过在多个Broker之间复制Partition数据,来实现Broker级别的高可用性。

比如:当某个Broker发生故障时,其他拥有该Partition副本的Broker可以接管,从而保证服务的连续性。

Kafka如何实现高可用?-mikechen

Kafka 中的每个 Partition 都可以配置多个 副本(Replica),这些副本分布在多个 Broker 上,提升了容错能力:

比如:某个 Broker 宕机时,其上的 Leader 副本失效,但其他副本可以选为新的 Leader,保障服务不中断。

这样,保证数据在多个节点上都有副本,防止单点故障。

 

Broker故障检测

每个Kafka Broker在启动时,都会在Zookeeper中注册自己的信息,并定期向Zookeeper发送心跳信号,表明自己处于活动状态。

Zookeeper会维护每个Broker的会话状态,如果Zookeeper在一定时间内没有收到某个Broker的心跳信号。

Kafka如何实现高可用?-mikechen

就会认为该Broker已经失效,并将其从活动Broker列表中移除。

如果采用KRaft(新架构),Kafka 自身内置 Raft 协议。

这样,自动选举 Leader,无需外部 Zookeeper。

 

Leader选举

每个 Partition 的所有副本中,只有一个是 Leader,负责处理所有读写操作,其它是 Follower。

对于每个Topic的每个Partition,Kafka都会选举出一个Leader副本 (Leader Replica)。

Kafka如何实现高可用?-mikechen

所有针对该Partition的读写请求,都由Leader副本处理。

除了Leader副本外,还可以有零个或多个Follower副本 (Follower Replica)。

Follower副本负责从Leader副本复制数据,保持与Leader副本的数据同步。

 

ISR数据可靠性保障

ISR:是指当前与Leader副本保持同步的Follower副本集合。

Kafka如何实现高可用?-mikechen

只有ISR中的Follower副本才有资格被选举为新的Leader。

一个Follower副本被认为是In-Sync的条件是它在一定时间内(由配置参数决定),成功地从Leader副本复制了最新的日志。

ISR机制保证了在Leader副本发生故障时,新的Leader拥有最新的数据,从而避免数据丢失。

评论交流
    说说你的看法