1. 概念
Kafka Connect 是什么?
Kafka Connect 是 Apache Kafka 提供的一个配置驱动框架,用于在 Kafka 和外部系统之间高效传输数据,无需开发复杂代码。
核心组件
-
Connector(连接器) - Source Connector :从外部系统读取数据写入 Kafka。 - Sink Connector:从 Kafka 读取数据写入外部系统。 - 连接器负责定义、管理和启动实际运行的任务。
-
Task(任务) 执行数据移动的最小单元,由连接器创建,Worker 调度和运行。
-
Worker(工作进程) Kafka Connect 的运行容器,负责:
-
执行 Connector 和 Task;
-
接收 REST API 请求;
-
管理配置、状态和任务调度;
-
负载均衡和高可用。
-
Converter(转换器) 转换 Kafka 中存储的原始数据与 Connect 内部数据结构之间的格式。常见的转换器有:
-
JSONConverter(默认)
-
AvroConverter(结合 Confluent Schema Registry)
-
ProtobufConverter
-
StringConverter
-
Single Message Transformation(SMT) 用于轻量、无状态的数据转换操作,例如字段过滤、字段重命名等。
部署模式
-
Standalone(单机模式) - 适合开发、测试、小型任务。
-
无高可用性,扩展性有限。
-
Distributed( 分布式 模式) - 推荐生产环境使用。
-
Worker 组成集群,任务自动分配、重平衡,具备高可用性。
数据模型与可靠性
Kafka Connect 利用 Kafka 内部的三个主题实现可靠性:
-
配置主题:保存 Connector 配置。
-
状态主题:存储 Connector 和 Task 的状态。
-
偏移主题:保存任务的消费偏移量。
2. 应用场景
实时数据管道
通过 Source Connector 把数据流式写入 Kafka,或者使用 Sink Connector 把 Kafka 数据推送到外部系统,支持实时分析和监控。
数据同步
例如将生产数据库的数据持续同步到数据仓库,或在多系统之间保持数据一致性。
ELT / ETL 任务
-
ELT:Kafka Connect 完成 Extract(提取)和 Load(加载),复杂转换由 Kafka Streams、Flink 等完成。
-
ETL:简单转换可直接通过 SMT 在 Kafka Connect 内部完成。
CDC(Change Data Capture)
利用 Debezium 等 Source Connector,通过读取数据库事务日志(binlog、oplog),捕获增量变更,避免轮询,提高效率和准确性。
多系统集成
Kafka Connect 提供丰富的现成连接器,支持:
-
关系型数据库:MySQL、PostgreSQL、Oracle、SQL Server
-
NoSQL:MongoDB、Cassandra
-
搜索与分析:Elasticsearch、OpenSearch
-
云存储:S3、GCS、Azure Blob
-
数据仓库:BigQuery、Snowflake、Redshift
-
消息中间件:RabbitMQ、ActiveMQ、JMS
3. 处理流程
Kafka Connect 的数据处理流程分为以下几个阶段:
1. Connector 配置与启动
-
用户通过 REST API 或配置文件定义 Connector:
-
数据源 / 目标系统参数
-
转换器类型
-
SMT 策略
-
任务并行数
-
Worker 接收配置并存储到 Kafka 的配置主题中。
2. 任务划分
Connector 根据配置拆分任务(Task),如:
-
数据库表分片
-
分区拆分
-
分布式 offset 分配
3. 任务调度与运行
-
Worker 集群自动分配任务。
-
若某个 Worker 挂掉,任务会在其他 Worker 上重新启动。
4. 数据读取与转换
-
Source Task
-
从源系统读取数据。
-
构造 Schema + Value 对象。
-
提供给 Worker。
-
转换器
-
Worker 根据配置调用 Converter,将数据转换为 Kafka 支持的存储格式(JSON、Avro、Protobuf)。
-
SMT
-
在数据写入 Kafka 前对消息做轻量的转换处理(例如删除字段、增加时间戳等)。
5. 数据写入 Kafka
-
Worker 将转换后的消息写入 Kafka Topic。
-
如果使用 Avro / Protobuf,Schema 信息会存储在 Schema Registry 中。
6. Sink Task 处理
-
Worker 从 Kafka 读取数据。
-
使用 Converter 反序列化数据。
-
可选 SMT 处理。
-
Sink Task 按目标系统要求写入外部存储。
7. 偏移量管理
-
Kafka Connect 自动管理偏移量。
-
偏移量存储在 Kafka 内部主题中,保证任务恢复后可以精确恢复到上一次处理的位置。
4. 执行逻辑(Execution Logic)
分层职责
层级 | 职责 |
---|---|
Worker | 任务调度、配置管理、REST 接口、伸缩与高可用 |
Connector | 定义任务、拆分任务、数据管道管理 |
Task | 执行数据读取或写入 |
Converter | 格式转换:Kafka ↔ 数据源 |
SMT | 单条消息轻量级处理 |
高可用与扩展性
- 分布式 Worker 模式支持横向扩展。
- Worker 故障时任务会自动迁移。
- 状态和偏移量保存在 Kafka 内部主题中,实现断点续传。
插件化架构
Kafka Connect 提供丰富的扩展点:
- Connector 插件:支持各种外部系统。
- Converter 插件:支持多种数据格式。
- SMT 插件:支持多种单条消息转换。
- 自定义 Connector:通过实现 API 可支持企业内部系统。
Schema 驱动的数据模型
- 支持 Avro / Protobuf / JSON Schema。
- 集成 Schema Registry,可进行 Schema 演进与兼容性检查。
配置驱动、低代码
- 提供 REST API 管理 Connector。
- Pipeline 通过 JSON 或 properties 文件定义。
- 无需编写业务逻辑代码即可完成数据管道搭建。
总结一览表
方面 | 核心要点 |
---|---|
概念 | Connector / Task / Worker / Converter / SMT,多种部署模式,状态存储于 Kafka 内部。 |
场景 | 实时管道、数据同步、ELT/ETL、CDC、多系统集成。 |
流程 | 配置 → 任务划分 → 调度 → 数据读取 → 转换 → 写 Kafka → Sink 写入 → 偏移管理。 |
执行逻辑 | 分层职责、分布式容错、插件扩展、Schema 管理、配置即代码。 |