消息队列三|Kafka 如何做到高可用?

我们在之前的文章中,聊到了redis的高可用机制。

本篇文章中我们聊聊Kafka如何做到高可用

副本?

说到Kafka的高可用保障,自然都会想到副本。

什么是副本呢?副本是分布式系统对数据和服务提供的一种冗余方式。

Kafka 从0.8版本开始为分区引入了多副本的机制,通过增加副本数量来提升数据容灾的能力。并且通过多副本机制实现故障的自动转移,在kafka 集群中某个broker节点失效的情况下仍然能保持服务可用。

副本相关的有AR,ISR,HW,LEO 几个概念,下面我们一一介绍一下。

什么是AR,ISR:

分区中的所有副本统称为AR,而ISR是指与leader保持同步的副本集合,leader副本也是这个集合的一员。

消息队列三|Kafka 如何做到高可用?_第1张图片

什么是HW,LEO?

LEO标识每个分区中最后一条消息的下一个位置,分区的每个副本都有自己的LEO,ISR中最小的LEO即为HW,LEO对消费这不可见,消费者只能拉取HW之前的消息。如下图,HW=min(5,2,3)=2。

消息队列三|Kafka 如何做到高可用?_第2张图片

从生产者发出的消息首先会被写入分区的leader副本,不过还需要等待ISR集合中的所有副本同步完之后才能被认为已经提交,之后才会重新更新分区的HW,进而消费者可以消费到这条消息。

副本如何同步数据?

说到数据同步,不管是哪一个中间件,redis也好,kafka也好,或者其他的中间件产品,都要去解决两个在同步数据过程中可能带来的两个问题。

1 数据丢失的问题

2 数据不一致的问题

我们用一张图来表示ISR集合中Follower副本同步leader副本的过程。

消息队列三|Kafka 如何做到高可用?_第3张图片

关于数据丢失的问

你可能感兴趣的:(消息队列,java,消息队列,高并发)