二,多副本机制 |小册免费学

135 阅读2分钟

多副本

Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。

同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样)。这部分机制其实很像Redis里的主从复制。

不妨稍微回忆下Redis的主从复制,主从复制和哨兵模式加在一起可以保证redis的可用性(也就是一个节点挂了,这个服务还能用)。那么kafka的多副本大概也是为了保证可用性。

生产者和消费者只与 leader 副本交互。你可以理解为其他副本只是 leader 副本的拷贝,它们的存在只是为了保证消息存储的安全性。当 leader 副本发生故障时会从 follower 中选举出一个 leader,但是 follower 中如果有和 leader 同步程度达不到要求的参加不了 leader 的竞选。Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker 失效时仍然能保证服务可用。

image.png

多分区和多副本

  1. Kafka 通过给特定 Topic 指定多个 Partition, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力(负载均衡)。
  2. Partition 可以指定对应的 Replica 数, 这也极大地提高了消息存储的安全性, 提高了容灾能力,不过也相应的增加了所需要的存储空间。

同步or异步

多副本并不是同步或异步,搞清多副本一致的具体机制之前,首先要弄清两个概念

  • HW 是 High Watermark 的缩写,俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。即,只有这部分是对消费者可见的。
  • LEO 是 Log End Offset 的缩写,它标识当前日志文件中下一条待写入消息的 offset。每个副本的LEO都是不同的。
  1. 如果主从同步,HW和LEO应该是一致的。即所有的数据都是可见的,所有的从或主的数据都是相同的。
  2. HW是从中最小的LEO-1.

文章末尾请带上以下文字及链接:本文正在参与「掘金小册免费学啦!」活动, 点击查看活动详情