Java 工程师的进阶之路 -Kafka 篇(二)

3. Kafka 的副本机制

复制功能是 Kafka 架构的核心功能,在 Kafka 文档里面 Kafka 把自己描述为 一个分布式的、可分区的、可复制的提交日志服务。复制之所以这么关键,是因为消息的持久存储非常重要,这能够保证在主节点宕机后依旧能够保证 Kafka 高可用。副本机制也可以称为备份机制(Replication),通常指分布式系统在多台网络交互的机器上保存有相同的数据备份/拷贝。

Kafka 使用主题来组织数据,每个主题又被分为若干个分区,分区会部署在一到多个 broker 上,每个分区都会有多个副本,所以副本也会被保存在 broker 上,每个 broker 可能会保存成千上万个副本。下图是一个副本复制示意图:

如上图所示,为了简单我只画出了两个 broker , 每个 broker 指保存了一个 Topic 的消息,在 broker1 中 分区 0 是 Leader,它负责进行分区的复制工作,把 broker1 中的 分区 0 复制一个副本到 broker2 的主题 A 的 分区 0。同理,主题 A 的 分区 1 也是一样的道理。

3.1. Leader 副本

副本类型分为两种:一种是 Leader(领导者) 副本,一种是 Follower(跟随者)副本

3.2. Follower 副本

除了 Leader 副本以外的副本统称为 Follower 副本,Follower 不对外提供服务。下面是 Leader 副本的工作方式:

 

需要注意以下几点:

Kafka 中,Follower 副本也就是追随者副本是不对外提供服务的。这就是说,任何一个追随者副本都不能响应消费者和生产者的请求。所有的请求都是由领导者副本来处理。或者说,所有的请求都必须发送到 Leader 副本所在的 broker 中,Follower 副本只是用做数据拉取,采用异步拉取的方式,并写入到自己的提交日志中,从而实现与 Leader 的同步;

当 Leader 副本所在的 broker 宕机后,Kafka 依托于 ZooKeeper 提供的监控功能能够实时感知到,并开启新一轮的选举,从追随者副本中选一个作为 Leader。如果宕机的 broker 重启完成后,该分区的副本会作为 Follower 重新加入。

3.3. Follower 和 Leader 副本同步

Leader 的另一个任务是搞清楚哪个 Follower 的状态与自己是一致的。Follower 为了保证与 Leader 的状态一致,在有新消息到达之前先尝试从 Leader 那里复制消息。为了与 Leader 保持一致,Follower 向 Leader 发起获取数据的请求,这种请求与消费者为了读取消息而发送的信息是一样的。

Follower 向 Leader 发送消息的过程是这样的,先请求消息 1,然后再接收到消息 1,在时候到请求 1 之后,发送请求 2,在收到领导者给发送给跟随者之前,跟随者是不会继续发送消息的。这个过程如下:

 

Follower 副本在收到响应消息前,是不会继续发送消息,这一点很重要。通过查看每个 Follower 请求的最新偏移量, Leader 就会知道每个 Follower 复制的进度。

如果 Follower 在 10s 内没有请求任何消息,或者虽然 Follower 已经发送请求,但是在 10s 内没有收到消息,就会被认为是不同步的。如果一个副本没有与 Leader 同步,那么在 Leader 掉线后,这个副本将不会称为 Leader ,因为这个副本的消息不是全部的。

与之相反的,如果 Foll

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值