1. 可观测性工程导论
在传统运维语境里,我们习惯问:“系统还活着吗?”于是有了存活探针、端口检查和 CPU 使用率曲线。但在 Confluent Kafka 数据平台这类分布式流数据系统里,这个问题远远不够。真正棘手的是:“为什么这条订单事件延迟了 8 秒才到达下游?”“为什么消费者组突然开始反复 rebalance?”“为什么 broker 磁盘写入正常,端到端吞吐却掉了 40%?”回答这些问题,需要的不只是监控,而是可观测性。
可观测性(Observability)源自控制论:一个系统若能仅凭其外部输出,就推断出内部状态,则称其可观测。落到工程实践,它意味着:当系统没有按预期工作时,我们不必登录机器、重启服务或猜测,而是能通过系统自身产生的数据,提出新问题并逐步逼近根因。监控回答“已知的已知”,可观测性则支撑“未知的未知”。
三大支柱:指标、日志、追踪
可观测性通常由三类遥测数据支撑,它们不是三套独立工具,而是同一事实的三种投影。
- 指标(Metrics):随时间变化的数值聚合,如
kafka_server_brokertopicmetrics_bytesin_total、消费者 lag、请求 P99 延迟。它便宜、可长期存储、适合告警和趋势判断,但维度有限,难以解释“为什么”。 - 日志(Logs):离散事件的文本或结构化记录,如 broker 的
INFO [ReplicaManager]、Connect worker 的 task 失败堆栈、Schema Registry 的兼容性拒绝。它信息丰富、可携带上下文,但量大、成本高、跨服务关联困难。 - 追踪(Traces):一次请求或一条消息在多个组件间的因果链路,由 trace ID 和 span 组成。在 Kafka 场景中,它可串起 producer → broker → consumer → 下游数据库的完整路径,直接回答“慢在哪一跳”。
三者的关系可以用一个判断逻辑来理解:指标告诉你“有异常”,追踪告诉你“异常发生在哪条链路”,日志告诉你“那一跳具体发生了什么”。缺少任何一根支柱,排障都会退化为盲人摸象。
在 Confluent Kafka 平台中的价值
Confluent 平台把 Kafka、Schema Registry、Connect、ksqlDB、Control Center 等组件组合成一条数据管道。可观测性在这里的价值非常具体:
- 端到端延迟归因:一条消息从 producer 发出到写入下游,可能经过 broker 复制、Connect 转换、Schema 校验。只有追踪能把“8 秒”拆成“broker 0.2s + Connect 转换 0.3s + 下游写入 7.5s”。
- 消费者健康判断:lag 指标能发现消费落后,但无法区分是消费逻辑慢、分区分配不均,还是 rebalance 风暴。日志中的
Rebalance事件和追踪中的 poll 间隔才能给出答案。 - Schema 变更影响评估:Schema Registry 的兼容性检查失败会直接阻断生产。指标反映失败率,日志给出具体不兼容字段,追踪则显示哪些应用受影响。
- 容量与成本治理:指标用于判断分区是否倾斜、副本是否过多;日志用于识别异常重试;追踪用于发现不必要的跨集群调用。
挑战:为什么 Kafka 的可观测性更难
Kafka 的异步、分区、多副本特性,让可观测性面临几个独特挑战。
第一,异步解耦导致追踪断链。Producer 发送后并不等待消费者处理,消息在 broker 中停留的时间没有天然的请求上下文。要在 Kafka 中实现追踪,必须把 trace 上下文写入消息头(headers),由消费者提取后继续传播。若消息头被中间组件丢弃,链路就会断裂。
第二,分区与消费者组带来维度爆炸。一个 topic 可能有 200 个分区、30 个消费者实例。lag 指标如果只按 topic 聚合,会掩盖单分区热点;如果按分区展开,又会产生大量时间序列。合理的做法是分层:topic 级看趋势,partition 级看倾斜,consumer 级看实例健康。
第三,日志量大且噪声高。Broker 在高吞吐下每秒可产生数万条日志,其中大量是正常的副本同步和请求处理记录。若不加采样和结构化,排障时会被淹没。建议对 broker 日志按级别和 logger 分类,对 Connect 和 Schema Registry 保留结构化字段(如 connector、task、subject)。
第四,指标语义需要领域知识。UnderReplicatedPartitions 大于 0 不一定代表故障,可能是短暂的副本同步;RequestHandlerAvgIdlePercent 低才说明 broker 线程池吃紧。不理解这些语义,告警就会误报。
从数据到判断:一个最小示例
假设某订单 topic 的消费者 lag 在 10:00 从 200 突增到 12000。按三支柱协同排查:
- 看指标:lag 增长的同时,
consumer poll rate下降,但 broker 的bytesIn正常,说明生产端没问题,问题在消费端。 - 看追踪:抽取一条 trace,发现 broker 到 consumer 的 span 耗时从 5ms 涨到 900ms,而 consumer 内部处理 span 只有 20ms,说明瓶颈在网络或消费者拉取阶段。
- 看日志:consumer 日志出现
Disconnected from node 3和Rebalance,broker 日志显示该节点网络抖动。根因是消费者与 broker 之间的连接不稳定,触发频繁 rebalance,导致消费停滞。
这个例子说明:指标负责“发现”,追踪负责“定位”,日志负责“解释”。三者缺一,排障就会变成猜测。可观测性工程的目标,就是让这条路径尽可能短、尽可能自动。