Kafka Streams、Connect 与生态
学习目标Kafka 不只是消息中间件还包含流处理、数据集成和跨集群复制生态。本章覆盖Kafka Streams在应用内做流计算。Kafka Connect标准化数据采集和落地。Schema Registry治理事件结构。MirrorMaker 2跨集群复制。Kafka StreamsKafka Streams 是 Kafka 官方 Java 流处理库。它不是独立集群而是嵌入你的应用进程。适合实时计数。订单状态聚合。风控规则。双流 join。窗口统计。不适合超大规模复杂 SQL 分析优先考虑 Flink/Spark。多语言团队强依赖非 Java 技术栈。Streams 核心概念概念说明KStream无界事件流每条记录都是事实KTable按 key 聚合后的最新状态GlobalKTable每个实例持有完整表副本State Store本地状态存储通常基于 RocksDBWindow时间窗口如滚动窗口、滑动窗口、会话窗口Streams 示例统计订单金额伪代码StreamsBuilderbuildernewStreamsBuilder();KStreamString,OrderEventordersbuilder.stream(order-events);orders.filter((key,value)-PAID.equals(value.status())).groupByKey().aggregate(()-BigDecimal.ZERO,(key,value,total)-total.add(value.amount()),Materialized.as(order-amount-store)).toStream().to(order-amount-summary);这段逻辑表达的是读取 order-events - 只保留 PAID - 按订单 key 聚合金额 - 输出汇总 topicKafka ConnectKafka Connect 用于把外部系统与 Kafka 连接起来减少每个团队重复写采集和落地代码。两类 Connector类型方向示例Source Connector外部系统 - KafkaMySQL CDC、文件、MQ、HTTPSink ConnectorKafka - 外部系统Elasticsearch、S3、HDFS、JDBC典型链路MySQL binlog - Debezium Source Connector - Kafka - Elasticsearch Sink ConnectorConnect 运行模式模式说明适用Standalone单进程、本地配置本地测试Distributed多 worker、Kafka 存状态生产环境生产建议使用 Distributed 模式因为它支持worker 扩容。connector task 分配。配置存储在 Kafka topic。故障后自动恢复。Schema Registry随着 topic 被多个系统订阅事件结构必须治理。否则一个字段改名就可能导致多个消费者失败。常见格式JSON简单直观但缺少强约束。Avro常配合 Schema Registry适合数据平台。Protobuf跨语言强类型体积较小。Schema 演进规则变更是否安全说明新增可选字段通常安全老消费者可忽略删除必填字段不安全老消费者可能解析失败字段改名不安全等同删除旧字段改变字段类型不安全需要版本兼容新增事件类型通常安全消费端要有默认分支推荐事件兼容策略只新增可选字段不随意删除或改名破坏性变更使用新 topic 或 eventVersion。MirrorMaker 2MirrorMaker 2 用于 Kafka 集群间复制。场景同城双活读取。异地灾备。机房迁移。云上云下数据同步。复制链路source cluster topic - MM2 connector - target cluster topic注意事项跨集群复制有延迟不是强一致。topic 命名可能带 source cluster alias。offset 同步需要额外配置和验证。灾备切换前要明确 RPO/RTO。生态选型需求Kafka 原生能力何时换其他组件简单实时聚合Kafka Streams复杂 SQL、超大状态用 Flink数据采集落地Kafka ConnectConnector 不成熟时自研Schema 治理Schema Registry多语言强约束可选 Protobuf 平台跨集群复制MirrorMaker 2云厂商托管复制能力更稳定时延迟任务不建议直接用 Kafka用专门延迟队列或调度系统实操建议学习阶段先掌握普通 producer/consumer。再学习 Connect用现成 connector 接入文件或数据库。再学习 Streams理解流、表、窗口和状态。最后学习 Schema 和跨集群复制。生产阶段所有跨团队共享 topic 必须有 Schema 文档。Connector 任务必须有错误队列、重试、监控和告警。Streams 应用必须监控 lag、state store 大小、处理延迟。跨集群复制必须定期演练切换。学习目标本章面向生产环境解决 Kafka 上线后怎么治理集群部署和滚动升级。监控指标和告警阈值。安全认证与权限。常见故障排查。故障演练和运维清单。生产集群基本建议项目建议Broker 数量至少 3 台副本数核心 topic 使用 3min.insync.replicas核心 topic 使用 2磁盘独立 SSD 或高性能云盘机架感知跨可用区部署时开启 rack awarenessJVM固定堆大小避免过大堆导致长 GC版本统一版本滚动升级前读 release notesTopic 治理规范每个生产 topic 都应该登记这些信息字段示例Topic 名称order-events负责人订单团队数据级别核心业务Partition 数24副本数3保留时间7 天Schema 地址文档或 Registry subject生产者order-service消费者inventory-service、risk-service告警阈值lag 100000 持续 10 分钟监控指标Broker 指标指标含义风险UnderReplicatedPartitions副本不足的 partition 数broker 或网络异常OfflinePartitionsCount无 leader partition 数topic 不可用ActiveControllerCount当前 controller 数正常应为 1RequestHandlerAvgIdlePercent请求处理线程空闲率过低表示 broker 忙NetworkProcessorAvgIdlePercent网络线程空闲率过低表示网络线程忙BytesInPerSec/BytesOutPerSec入站/出站流量容量和热点判断Consumer 指标指标含义处理Consumer Lag未消费消息数扩容消费者或优化处理Rebalance Rate再均衡频率排查实例波动和处理超时Poll Latency拉取延迟broker 或网络问题Processing Latency业务处理耗时下游慢或逻辑复杂Producer 指标指标含义request-latency-avg请求平均延迟record-error-rate发送错误率record-retry-rate重试率batch-size-avg平均批次大小compression-rate-avg压缩效果告警建议告警建议阈值Offline partition大于 0 立即告警Under replicated partition大于 0 持续 5 分钟告警Controller 不为 1立即告警磁盘使用率大于 75% 预警大于 85% 严重Consumer lag按业务 SLA 设置例如 10 分钟未下降Producer error rate大于 0.1% 持续 5 分钟Rebalance 频繁10 分钟内多次安全Kafka 安全包含三层传输加密SSL/TLS。身份认证SASL/PLAIN、SCRAM、Kerberos、mTLS。授权ACL。ACL 示例kafka-acls --bootstrap-server kafka-1:9092\--add\--allow-principal User:order-service\--operationWrite\--topicorder-events给消费组授权kafka-acls --bootstrap-server kafka-1:9092\--add\--allow-principal User:inventory-service\--operationRead\--topicorder-events\--groupinventory-service安全原则按服务账号授权不共享账号。生产者只给写权限。消费者只给读 topic 和读 group 权限。禁止业务服务拥有集群级管理权限。密钥定期轮换。常见故障排查消费堆积排查顺序查看 lag 是否持续增长。看消费者日志是否报错或重试。看单条处理耗时和批处理耗时。看下游数据库、缓存、HTTP 是否慢。看消费者实例数是否小于 partition 数。看是否频繁 rebalance。临时处理扩容消费者实例。降低每条消息处理成本。暂停非核心消费者。将坏消息转入 DLT。对下游做限流保护。ISR 缩小排查顺序Broker 是否宕机。网络是否抖动。磁盘 IO 是否高。follower 是否 GC 或 CPU 飙高。topic 写入是否突增。风险acksall且 ISR 小于min.insync.replicas时producer 会写入失败。这是保护机制不应该直接降低可靠性配置掩盖问题。Producer 超时常见原因broker 请求队列满。topic leader 不可用。ISR 不足导致无法满足acksall。网络延迟高。生产端 buffer 满。排查指标producer request latency。producer buffer available bytes。broker request handler idle。under replicated partitions。滚动升级升级前备份配置。确认 controller 和 broker 状态健康。检查 under replicated partitions 为 0。阅读版本兼容说明。先升级非核心或测试集群。升级中停止一台 broker - 升级 - 启动 - 等 ISR 恢复 - 升级下一台升级后检查 controller 数。检查 ISR。检查 producer error rate。检查 consumer lag。检查日志异常。故障演练演练目的验证停一台 broker验证副本容错topic 可读写ISR 可恢复停消费者实例验证 rebalance其他实例接管 partition下游数据库变慢验证背压消费者不崩溃lag 可控写入坏消息验证 DLT坏消息进入死信 topic磁盘逼近阈值验证容量告警告警触发扩容流程明确