3. 元数据体系设计
在 Kafka 数据质量与元数据治理中,元数据体系是整个治理平台的“骨架”。如果元数据分类混乱、采集范围不清、落地方式不统一,后续的数据血缘、影响分析、质量规则绑定、权限审计都会失去可靠基础。业界通常把元数据划分为三类:业务元数据、技术元数据和操作元数据。三者不是并列孤立的清单,而是从“业务含义—技术实现—运行状态”三个视角描述同一份数据资产。
三类元数据的定位与采集范围
业务元数据回答“这份数据在业务上是什么”。在 Kafka 生态中,它主要描述 Topic、Schema 字段、消费者组所承载的业务语义,包括:Topic 的中文名称、业务域归属、数据负责人、数据等级(公开/内部/敏感/机密)、字段的业务含义、枚举值字典、指标口径、上下游业务系统等。采集范围通常来自数据资产登记、Schema Registry 中的字段注释、数据地图人工维护以及业务系统元数据同步。业务元数据是数据发现和权限审批的核心依据。
技术元数据回答“这份数据在技术上如何存储和流动”。它描述 Topic 的物理结构、Schema 定义、分区与副本、序列化格式、Broker 集群归属、生产与消费程序、Connector 配置、数据血缘等。采集范围包括:Kafka 集群的 Topic 列表、分区数、副本因子、清理策略、消息格式(Avro/Protobuf/JSON)、Schema 版本与兼容性级别、Kafka Connect 的 source/sink 配置、Flink/Spark 作业的输入输出 Topic。技术元数据主要来自 Kafka AdminClient、Schema Registry REST API、Connect API 以及作业调度平台的自动采集。
操作元数据回答“这份数据运行得怎么样”。它记录运行时的状态与行为,包括:消息生产/消费速率、消费组 Lag、分区 Leader 分布、ISR 收缩、请求延迟、磁盘使用、Schema 注册与兼容性检查事件、Topic 创建/删除/配置变更审计日志、消费者组重平衡记录等。采集范围来自 Kafka JMX 指标、Broker 日志、消费组命令输出、审计日志以及监控系统。操作元数据是数据质量告警、容量规划和故障排查的直接输入。
在 Kafka 生态中的落地方式
三类元数据要真正落地,关键是找到“采集入口”和“关联主键”。在 Kafka 生态中,最自然的关联主键是 Topic、Schema Subject 和 Consumer Group。围绕这三个主键,可以建立统一的元数据服务。
技术元数据的采集最成熟。通过 Kafka AdminClient 可以定期拉取 Topic 列表、分区、副本、配置项;通过 Schema Registry REST API 可以获取每个 Subject 的最新 Schema、版本历史和兼容性级别;通过 Kafka Connect REST API 可以获取 Connector 及其 source/sink 的 Topic 映射。这些接口返回的是结构化 JSON,适合用定时任务(例如每 5 分钟一次)增量写入元数据存储。
业务元数据无法完全自动采集,需要“自动 + 人工”结合。自动部分来自 Schema 中的字段注释、Topic 命名规范解析(例如 ods_order_created 可解析出业务域 order 和事件类型 created);人工部分来自数据资产登记平台,由数据负责人补充中文名、数据等级和指标口径。建议在 Topic 创建流程中强制填写业务元数据,否则不予审批,从源头保证完整性。
操作元数据的采集依赖监控体系。Kafka Broker 通过 JMX 暴露大量指标,例如 kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec、kafka.consumer:type=ConsumerLag 等。消费组 Lag 也可以通过 kafka-consumer-groups.sh --describe 获取。这些指标按时间序列写入监控库,并与 Topic 主键关联,形成“操作元数据时间线”。
一个可执行的元数据登记示例
下面给出一个 Topic 级元数据登记表的示例结构,字段覆盖三类元数据,可直接作为数据资产登记模板使用。示例中的值均为教学假设,不代表真实生产数据。
| 字段 | 元数据类型 | 示例值 | 采集方式 |
|---|---|---|---|
| topic_name | 技术 | ods_order_created | AdminClient 自动 |
| partitions / replicas | 技术 | 12 / 3 | AdminClient 自动 |
| schema_subject | 技术 | ods_order_created-value | Schema Registry API |
| compatibility | 技术 | BACKWARD | Schema Registry API |
| business_domain | 业务 | 订单域 | 人工登记 |
| data_level | 业务 | 内部 | 人工登记 |
| owner | 业务 | order-platform@example.com | 人工登记 |
| consumer_lag_p95 | 操作 | 1200 | JMX / 监控采集 |
| messages_in_per_sec | 操作 | 8500 | JMX 采集 |
| last_config_change | 操作 | 2025-03-12 14:22:07 | 审计日志 |
这张表的价值在于:它把“业务含义、技术结构、运行状态”统一到同一个 Topic 主键下。当订单域需要排查消费延迟时,可以先看操作元数据中的 Lag 和速率,再结合技术元数据中的分区数和副本分布判断是否存在分区倾斜,最后通过业务元数据找到负责人和影响范围。三类元数据各司其职,又通过主键关联形成完整视图。
总结来看,元数据体系设计的关键不是把三类元数据堆在一起,而是明确每类元数据的采集入口、更新频率、关联主键和消费场景。业务元数据解决“看得懂”,技术元数据解决“找得到”,操作元数据解决“管得住”。三者通过 Topic、Schema、Consumer Group 三个主键在 Kafka 生态中落地,才能支撑后续的数据质量规则、血缘分析和权限审计。