Files
KnowStreaming/docs/zh/Kafka分享/Kafka服务端_API请求_元信息控制类请求/Kafka服务端_API请求_元信息控制类请求.md
2023-02-14 14:57:39 +08:00

4.2 KiB
Raw Blame History

Kafka Broker 元信息变化请求处理

[TOC]

1、前言

Kafka Controller 主要通过 LEADER_AND_ISR、STOP_REPLICA 和 UPDATE_METADATA 三类请求,进行元信息变化的通知。

因此Kafka Broker 主要也是通过接收 Kafka Controller 发出来的这三个请求,来调整自身的状态。

本期分享主要介绍 Kafka Broker 如何处理这三类请求,以便后续在分享 Kafka Controller 的状态转变、Topic增删改查等专题的时候对 Kafka Broker 所做的事情有更加清晰快速的认识。

2、实现概述

这三个请求对象,都是继承自 AbstractControlRequest ,具体请求类之间的关系如下图所示:

  • AbstractControlRequest三个字段用于告知controllerId同时还有版本信息确保只有最新的controller发出来的信息可以被处理。  

  • UpdateMetadataRequest同步集群元信息的请求同步的信息包括分区信息和存活的broker信息。所有的Broker都会存储一份完整的集群元信息因此客户端随便请求哪一台Broker都可以获取到Topic的元信息。  

  • StopReplicaRequest通知停副本同步的请求此外还带有一个是否将副本删除的字段。一般Broker下线、Topic删除、Topic缩副本、Topic迁移等Kafka Controller都会发送该请求。  

  • LeaderAndIsrRequest通知分区状态(Leader、AR、ISR等)的请求

问题一:这里我们发现 UPDATE_METADATA 请求和 LEADER_AND_ISR 请求,他们请求的数据格式基本上是一致的,这块为什么要这么设计,为什么不设计成一个接口呢?

问题二这里的Node、Broker还有EndPoint的区别是什么


3、UPDATE_METADATA

3.1、UPDATE_METADATA 功能概述

区分 METADATA 请求和 UPDATE_METADATA

  • METADATA大部分是客户端发起请求获取Topic元信息的。
  • UPDATE_METADATA大部分是Controller发出来对Broker上的元信息进行更新。

3.2、UPDATE_METADATA 大体流程

3.3、UPDATE_METADATA 代码详读

3.3.1、存储的元信息

  // 在package kafka.server中的MetadataCache中存储了如下信息
  // 分区状态(UpdateMetadataPartitionState)
  // controllerId
  // 存活的broker信息
  // 存活的节点
  case class MetadataSnapshot(partitionStates: mutable.AnyRefMap[String, mutable.LongMap[UpdateMetadataPartitionState]],
                              controllerId: Option[Int],
                              aliveBrokers: mutable.LongMap[Broker],
                              aliveNodes: mutable.LongMap[collection.Map[ListenerName, Node]])

3.3.2、Quota分配策略

按照Leader的分布按Leader的比例数量分配Quota。因此存在的问题是如果Topic的分区流量不均衡那么可能当Topic的整体流量没有到限流值的是就显示已经被限流了。


4、STOP_REPLICA

4.1、STOP_REPLICA 功能概述

正如名字一样该请求的主要功能就是用于停Broker的副本的。

4.2、STOP_REPLICA 大体流程

5、LEADER_AND_ISR

5.1、LEADER_AND_ISR 功能概述

Leader_And_Isr请求的主要功能就是将分区的leader和follower切换的消息通知给broker然后broker进行Leader和Follower的切换。

5.2、LEADER_AND_ISR 大体流程

5.3、makeLeader 详细说明

5.4、makeFollower 详细说明


6、日常问题

6.1、问题一UPDATE_METADATA 和 LEADER_AND_ISR之间的区别

从Kafka Broker的角度看确实两个请求的数据基本是一样的

6.2、问题二这里的Node、Broker还有EndPoint的区别是什么