3. Confluent集群部署架构验收

Confluent集群部署架构验收的核心目标,是确认“控制面、数据面、跨中心复制面”三层拓扑与设计一致,并且任意单点故障不会导致集群不可用或数据不可恢复。验收对象包括Broker节点、KRaft控制器(或ZooKeeper集群,视版本而定)、以及多数据中心部署中的复制链路。验收不是简单看进程是否启动,而是通过拓扑核对、角色确认、副本分布检查和故障注入,验证高可用是否真实成立。

一、先确认控制面形态:KRaft还是ZooKeeper

Confluent Platform 7.x及以后版本推荐使用KRaft模式,ZooKeeper模式仍存在于部分存量集群。验收第一步必须明确当前集群属于哪种控制面,因为两者的检查项完全不同。

KRaft模式下,节点分为Controller、Broker和Controller+Broker混合角色。验收时要确认Controller数量为奇数(通常3或5个),且与Broker角色在物理或逻辑上分离。可通过以下命令查看节点注册情况:

kafka-metadata-quorum --bootstrap-server broker1:9092 describe --status
kafka-metadata-quorum --bootstrap-server broker1:9092 describe --replication

输出中应看到CurrentVoters包含全部Controller节点,且Leader唯一。若某个Controller长期不在Voters列表中,说明它未成功加入仲裁,高可用存在缺口。

ZooKeeper模式下,验收重点是ZooKeeper集群的节点数、myid配置、以及Broker与ZooKeeper的会话状态。使用 echo stat | nc zk1 2181 或 zkServer.sh status 可确认follower/leader角色。ZooKeeper节点数同样应为奇数,且Broker的zookeeper.connect应指向全部ZK节点,避免单点。

二、Broker拓扑与副本分布验证

Broker验收不能只看systemctl status。需要确认每个Broker的broker.id唯一、listeners与advertised.listeners可被其他节点和客户端正确解析,以及机架信息broker.rack已配置。机架感知是跨机架副本分布的前提。

使用以下命令查看Broker列表与机架:

kafka-broker-api-versions --bootstrap-server broker1:9092
kafka-topics --bootstrap-server broker1:9092 --describe --under-replicated-partitions

对于关键Topic,应检查分区副本是否分散在不同Broker和不同机架上。例如一个3副本Topic,若三个副本全部落在同一机架,则机架级故障会导致数据不可用。验收标准可设为:每个分区的副本集合中,至少覆盖2个不同broker.rack。

同时检查ISR(In-Sync Replicas)状态。若存在大量Isr: 1或持续under-replicated的分区,说明副本同步链路存在问题,需排查网络延迟、磁盘IO或replica.fetch.max.bytes等参数。

三、多数据中心拓扑验证

多数据中心部署通常采用Confluent Replicator或Cluster Linking。验收时要区分“同城双活”“两地三中心”等不同拓扑,确认复制方向、复制Topic命名、以及消费者偏移量是否同步。

以Cluster Linking为例,验收命令包括:

confluent cluster link list --cluster <target-cluster>
confluent cluster link describe <link-name> --cluster <target-cluster>

需要确认link状态为ACTIVE,且source与destination的Topic分区数一致。若使用Replicator,则检查Replicator Connector的tasks.max与replication.factor,并确认目标集群中副本Topic的min.insync.replicas不低于2。

跨中心验收还必须验证故障切换路径。例如主中心Broker全部不可用时,备用中心是否能在可接受时间内接管生产与消费。这需要结合DNS切换、客户端bootstrap.servers配置和acks=all语义综合判断。

Confluent多数据中心部署拓扑验收视图 数据中心 A(主) KRaft Controller 仲裁组 ctrl-1 (Leader) ctrl-2 (Follower) ctrl-3 (Follower) Broker 集群(rack-1 / rack-2) broker-1 rack-1 broker-2 rack-2 broker-3 rack-1 Topic: orders P0 副本 [1,2,3] ISR=3 ZooKeeper(仅存量集群适用) zk-1 / zk-2 / zk-3 奇数仲裁 验收检查点 Controller奇数 · 副本跨rack · ISR=副本数 · 无URP advertised.listeners可达 · broker.id唯一 数据中心 B(备) KRaft Controller 仲裁组 ctrl-4 (Follower) ctrl-5 (Follower) ctrl-6 (Follower) Broker 集群(rack-3 / rack-4) broker-4 rack-3 broker-5 rack-4 broker-6 rack-3 Topic: orders P0 副本 [4,5,6] ISR=3 ZooKeeper(仅存量集群适用) zk-4 / zk-5 / zk-6 奇数仲裁 验收检查点 Cluster Link ACTIVE · 分区数一致 · 偏移量同步 min.insync.replicas≥2 · 切换路径可验证 Cluster Link 仲裁同步 验收顺序:控制面仲裁 → Broker副本分布 → 跨中心复制链路 → 故障切换演练

四、高可用检查与故障注入

拓扑核对完成后,必须通过故障注入验证高可用。建议按以下顺序执行,每步观察集群恢复时间与数据一致性:

  1. 停止一个Controller:KRaft仲裁组应仍能选举Leader,kafka-metadata-quorum describe --status中Leader应切换,且Broker元数据操作不中断。
  2. 停止一个Broker:该Broker上的Leader分区应自动转移到其他副本,ISR收缩后恢复。观察UnderReplicatedPartitions指标是否在预期时间内归零。
  3. 模拟机架故障:停止同一broker.rack下所有Broker,验证Topic是否仍可读写。若不可读写,说明副本未跨机架分布,需调整replica.assignment。
  4. 断开跨中心链路:停止Cluster Link或Replicator,确认源集群生产不受影响,目标集群消费滞后可监控,链路恢复后能自动追平。

故障注入后,应记录恢复时间(RTO)与数据丢失量(RPO)。对于acks=all且min.insync.replicas=2的Topic,单Broker故障不应产生数据丢失。若出现数据丢失,需检查生产者acks配置与ISR收缩策略。

五、验收交付物示例

建议将验收结果整理为可追溯的检查表,以下为字段示例:

检查项 验收标准 实际结果 判定
KRaft Controller数量 奇数,≥3 3 通过
Controller Leader唯一 describe --status中Leader唯一 ctrl-1 通过
Broker rack配置 每个Broker均有broker.rack rack-1/2/3/4 通过
关键Topic副本跨机架 副本覆盖≥2个rack orders P0覆盖rack-1/2 通过
UnderReplicatedPartitions 持续为0 0 通过
Cluster Link状态 ACTIVE且分区数一致 ACTIVE,12/12 通过
单Broker故障RTO ≤30秒 18秒 通过
验收时优先使用kafka-metadata-quorum、kafka-topics --describe和confluent cluster link describe三类命令交叉验证。任何一项不通过,都应先修复拓扑或参数,再进入下一项,避免问题叠加导致误判。
ZooKeeper模式与KRaft模式不能混用。若集群已迁移到KRaft,验收时不应再依赖ZooKeeper的stat输出作为控制面健康依据,否则会得出错误结论。