1. Kafka Connect 概述
大家好,我是这次课程的主讲。咱们直接开门见山——Kafka Connect,说白了就是 Kafka 官方提供的一个数据集成工具。它的核心任务就一个:帮你在 Kafka 和各种外部系统之间,稳定、高效地搬运数据。
我刚开始接触 Kafka 的时候,其实也困惑过:Kafka 本身不就是个消息队列吗?为什么还要单独搞一个 Connect?后来在项目中踩过坑才明白,Kafka 只负责存和转发,但数据怎么进去、怎么出来,这活儿它不干。Connect 就是专门干这个的。
1.1 为什么需要 Kafka Connect?
你想想看,一个典型的数据平台,数据源可能来自数据库、日志文件、传感器、云服务……目标端可能是 HDFS、Elasticsearch、数据仓库。如果没有 Connect,你怎么办?
- 自己写生产者/消费者代码——每个系统写一套,重复造轮子
- 用第三方工具——版本兼容性、运维复杂度都是坑
- 手动导入导出——数据量一上来,人就废了
Connect 解决了三个核心痛点:
| 痛点 | Connect 的解法 |
|---|---|
| 重复开发 | 提供标准化 API,一套连接器搞定 |
| 运维复杂 | 分布式模式自带容错和负载均衡 |
| 数据一致性 | 支持 exactly-once 语义(配合 Kafka 事务) |
核心观点:Kafka Connect 不是锦上添花,而是数据平台的「高速公路出入口」。没有它,数据进出 Kafka 就是一场噩梦。
1.2 应用场景:我见过哪些真实案例?
我在项目中遇到过不少场景,这里挑几个典型的说说:
场景一:数据库 CDC 实时同步
用 Debezium 连接器监听 MySQL 的 binlog,数据变更实时推送到 Kafka。下游消费端可以同步更新缓存、搜索引擎、数据仓库。我曾经帮一家电商公司做过这个,订单数据从 MySQL 到 Elasticsearch 的延迟控制在 1 秒以内。
场景二:日志聚合
用 FileStream Source 连接器读取应用日志文件,写入 Kafka。再用 Sink 连接器写入 HDFS 做长期存储。嗯,这里要注意:日志量大的时候,一定要配置好分区数和压缩策略,否则磁盘会报警。
场景三:数据湖入湖
用 Confluent S3 Sink 连接器,把 Kafka 里的流式数据直接写入 S3 或 HDFS。我建议你使用 Parquet 格式,压缩比高,查询性能也好。
| 场景 | Source 连接器 | Sink 连接器 | 典型延迟 |
|---|---|---|---|
| 数据库 CDC | Debezium MySQL | JDBC Sink | 亚秒级 |
| 日志聚合 | FileStream Source | HDFS Sink | 秒级 |
| 数据入湖 | 自定义 Source | S3 Sink | 分钟级(可调) |
1.3 Kafka Connect 的两种运行模式
Connect 支持两种模式,我分别说说它们的适用场景:
- 单机模式(Standalone):适合开发测试、小规模场景。所有配置写在一个文件里,启动简单。但挂了就挂了,没有容错。
- 分布式模式(Distributed):生产环境首选。多个 Worker 节点组成集群,任务自动分配,节点挂了自动迁移。我建议你至少部署 3 个节点。
我的经验:刚开始学的时候,先用单机模式跑通一个简单的 FileStream 连接器,理解配置和生命周期。然后再切到分布式模式,感受一下自动 rebalance 的效果。
1.4 核心概念速览
在深入之前,先记住这几个关键概念:
| 概念 | 说明 |
|---|---|
| Connector | 连接器的逻辑定义,描述怎么连接外部系统 |
| Task | 实际干活的工作单元,一个 Connector 可以拆成多个 Task 并行 |
| Worker | 运行 Task 的进程,分布式模式下多个 Worker 组成集群 |
| Converter | 数据格式转换器,比如 JSON、Avro、Protobuf |
| Transform | 数据在传输过程中的轻量级转换,比如过滤、重命名字段 |
避坑指南:我曾经犯过一个错误——把 Connector 和 Task 混为一谈。记住:Connector 是「计划」,Task 是「执行」。一个 Connector 可以配置多个 Task 来并行拉取数据,但 Task 数量不能超过分区数或源系统的并发上限。
1.5 架构总览:一张图看懂
下面这张图展示了 Kafka Connect 的核心架构。我特意把 Source 和 Sink 两条链路分开画,方便你理解数据流向。
1.6 小结:你该记住什么?
这一章我们聊了 Kafka Connect 是什么、为什么需要它、以及它用在哪些地方。说白了,它就是 Kafka 生态里的「数据搬运工」,帮你把数据从 A 点搬到 B 点,而且搬得稳、搬得快。
我个人习惯把 Connect 看作一个「数据管道工厂」——你只需要告诉它「我要从哪取数据、送到哪去、用什么格式」,剩下的并发、容错、重试,它都帮你搞定。