2. Confluent平台架构与核心组件

Confluent Platform 与 Confluent Cloud 虽然交付形态不同,但共享同一套逻辑架构。理解这套架构的关键,不是记住组件名称,而是看清一条事件从产生到被消费、被治理、被查询的完整路径上,每个组件站在什么位置、承担什么职责、彼此通过什么接口协作。本节先建立分层视角,再逐层拆解核心组件,最后用一张组件协作图把数据流与控制流串起来。

一、分层视角:从存储内核到治理平面

Confluent 的架构可以自上而下分为四层,每层解决不同问题:

  • 存储与复制层:由 Broker 组成,负责分区日志的持久化、副本同步与读写服务,是整个平台的“事实来源”。
  • 集群控制层:由 Controller(KRaft 模式)承担元数据管理、分区领导者选举与集群成员协调,替代了早期 ZooKeeper 的角色。
  • 数据集成与处理层:Connect 负责系统间数据搬运,ksqlDB 负责流式 SQL 处理,二者都直接读写 Broker 中的 Topic。
  • 治理与元数据层:Schema Registry 管理数据契约,Stream Governance 提供血缘、目录、质量与策略控制,横跨所有层。

这四层不是简单的调用栈,而是“数据面”与“控制面”的交织:Broker 与 Connect、ksqlDB 之间流动的是真实事件数据;Controller、Schema Registry、Stream Governance 之间流动的是元数据、契约与策略。区分这两类流,是排查问题时定位方向的第一步。

二、Broker:分区日志的持有者

Broker 是 Kafka 的存储与读写服务进程。每个 Topic 被切分为若干 Partition,每个 Partition 是一个追加写的有序日志,分布在多个 Broker 上。以三节点集群、Topic orders 设置 6 个分区、副本因子 3 为例:6 个分区领导者会尽量均匀分散到 3 台 Broker,每个分区另有 2 个跟随副本。生产者写入时只与领导者交互,跟随副本持续拉取并确认,只有进入 ISR(同步副本集合)的副本才有资格在领导者故障时被选为新领导者。

Broker 的关键参数直接影响可用性与吞吐:num.partitions 决定默认分区数,default.replication.factor 决定默认副本数,min.insync.replicas 与生产者 acks=all 配合决定写入耐久性。例如设置 min.insync.replicas=2 且 acks=all,意味着至少 2 个副本确认才算写入成功;若可用副本不足 2 个,写入会被拒绝而不是静默降级,这是防止数据丢失的重要保护。

三、Controller:集群的大脑

在 KRaft 模式下,一部分节点同时充当 Controller 角色,通过 Raft 协议维护一份集群元数据日志。它负责:分区领导者选举、Broker 上下线感知、Topic 创建与删除、配置变更。Controller 不参与实际消息读写,因此它的负载与数据面吞吐无关,但与集群变更频率强相关。生产环境中,Controller 节点应使用独立、稳定的硬件,避免与高吞吐 Broker 混部导致元数据操作延迟。

四、Connect:把外部系统接入事件流

Connect 是一个分布式集成框架,通过 Source Connector 把外部系统数据写入 Kafka,通过 Sink Connector 把 Kafka 数据写出到外部系统。它自身也是 Kafka 的客户端:连接器配置、偏移量、状态都存储在内部 Topic 中(如 connect-configs、connect-offsets、connect-status),因此 Connect 集群可以水平扩展并具备故障恢复能力。

以 MySQL 到 Kafka 的同步为例,使用 Debezium MySQL Source Connector,关键配置包括:

{
  "name": "mysql-orders-source",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.hostname": "mysql.internal",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "******",
    "database.server.name": "mysql-prod",
    "table.include.list": "shop.orders,shop.order_items",
    "topic.prefix": "cdc",
    "tasks.max": "2",
    "key.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter": "io.confluent.connect.avro.AvroConverter",
    "value.converter.schema.registry.url": "http://schema-registry:8081"
  }
}

这里 tasks.max=2 表示最多并行 2 个任务;table.include.list 限定捕获范围;转换器指向 Schema Registry,使写入的 Avro 消息自动注册并携带 schema ID。运行后可通过 GET /connectors/mysql-orders-source/status 查看连接器与任务状态,若任务 state 为 RUNNING 且 trace 为空,说明同步正常。

五、Schema Registry:数据契约的守门人

Schema Registry 为 Avro、Protobuf、JSON Schema 提供集中式 schema 存储与兼容性检查。生产者发送消息时,序列化器向 Registry 注册 schema 并获得全局唯一 ID,消息体中只携带该 ID;消费者反序列化时用 ID 取回 schema。兼容性策略(BACKWARD、FORWARD、FULL、NONE)决定新 schema 能否注册。例如默认 BACKWARD 策略下,新增带默认值的字段是允许的,删除无默认值字段则会被拒绝。这保证了消费者升级前生产者不会破坏其解析能力。

六、ksqlDB 与 Stream Governance

ksqlDB 提供流式 SQL 引擎,把 Kafka Topic 抽象为 STREAM 与 TABLE,支持持续查询、聚合、连接与物化视图。它内部以 Kafka Streams 为执行引擎,查询结果可写回新 Topic。Stream Governance 则包含 Schema Registry、Stream Catalog、Stream Lineage 与 Stream Quality:Catalog 让用户搜索与发现数据资产,Lineage 追踪字段级血缘,Quality 基于规则检测数据异常。它们共同把“能跑通”升级为“可管理、可审计、可信任”。

Confluent 平台组件协作:数据面与控制面 治理与元数据层 Schema Registry 契约注册 / 兼容性检查 Stream Governance Catalog / Lineage / Quality 元数据与策略存储 schema / 血缘 / 规则 数据集成与处理层 Kafka Connect Source / Sink Connector ksqlDB STREAM / TABLE 持续查询 客户端应用 Producer / Consumer 集群控制层 Controller (KRaft) 元数据日志 / 领导者选举 Raft 仲裁组 元数据一致性 存储与复制层(Broker 集群) Broker 1 Leader P0 / Follower P2 Broker 2 Leader P1 / Follower P0 Broker 3 Leader P2 / Follower P1 读写事件 读写事件 读写事件 元数据 / 选举 schema 校验 血缘 / 质量 数据面:真实事件读写 控制面:元数据与选举 治理面:契约与策略 示例:Topic orders 6 分区、副本因子 3,P0/P1/P2 为分区领导者

七、协作关系与排障切入点

把上述组件放回一条真实链路:MySQL 业务库产生订单变更,Debezium Source Connector 捕获 binlog 并写入 cdc.shop.orders;写入前 Avro 序列化器向 Schema Registry 注册 schema;Broker 按分区持久化并同步副本;ksqlDB 订阅该 Topic 做实时聚合,结果写入 orders_summary;Sink Connector 再把汇总结果写入 Elasticsearch 供看板查询;Stream Lineage 记录从 MySQL 字段到 ES 索引的完整血缘。

当链路异常时,分层视角能快速缩小范围:消费者报 schema 不兼容,先查 Schema Registry 的兼容性策略与最近注册记录;写入超时且 NotEnoughReplicas,查 ISR 是否低于 min.insync.replicas;分区领导者频繁切换,查 Controller 日志与 Broker 网络;连接器任务反复重启,查 Connect 状态接口中的 trace 字段。先判断问题属于数据面、控制面还是治理面,再进入对应组件,比盲目重启高效得多。

Confluent Cloud 把上述组件以托管服务形式提供,Broker 与 Controller 对用户不可见,但 Connect、Schema Registry、ksqlDB、Stream Governance 仍以独立资源暴露,配置项与自管理版高度一致。掌握自管理版的组件边界,迁移到 Cloud 时只需替换端点与认证方式,架构认知可以直接复用。