订阅更新

不写代码也能同步数据?——Kafka Connect和生态工具全解析

Kafka手册 第 18 题 约 7 分钟读完

本文目录
  1. 先说结论
  2. Kafka Connect是什么?
  3. Kafka Connect vs FlinkCDC vs 手写代码
  4. Kafka Connect实战:配置示例
  5. 我在不同公司的数据集成方案选择
  6. 面试高频追问
  7. 总结

先说结论

Kafka生态有三大数据集成方式:① Kafka Connect(声明式配置,不写代码);② Producer/Consumer API(代码开发,最灵活);③ FlinkCDC/Debezium等专项工具。选型取决于数据源类型和开发成本。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

很多人只知道用Producer/Consumer API写代码收发消息,不知道Kafka还有一套不用写代码就能做数据集成的工具——Kafka Connect。我在某元宇宙社交公司用FlinkCDC同步MySQL到Kafka,在某知名出海硬件品牌用Databricks的Kafka Connector消费数据,这些本质上都是Kafka生态工具。面试官考这道题,看的是你对Kafka生态的了解广度。

Kafka Connect是什么?

Kafka Connect是Kafka官方提供的数据集成框架。它的核心思路是:把'从哪里读数据'和'往哪里写数据'抽象成标准化的Connector插件,你只需要写一个JSON配置文件就能启动数据同步,不用写代码。

# Kafka Connect的架构
#
#  数据源(MySQL/S3/...)                  数据目标(HDFS/Doris/...)
#        ↓                                     ↑
#  Source Connector                      Sink Connector
#        ↓                                     ↑
#        → → → Kafka Topic → → →
#
# Source Connector:从外部系统读数据写入Kafka
#   例:Debezium MySQL Connector、JDBC Source Connector
#
# Sink Connector:从Kafka读数据写入外部系统
#   例:HDFS Sink Connector、Elasticsearch Sink Connector
#
# 优势:声明式配置、自带容错和扩展、社区Connector丰富

Kafka Connect vs FlinkCDC vs 手写代码

方案适用场景优点缺点
Kafka Connect标准数据搬运(DB→Kafka→DB)不写代码、标准化复杂转换能力弱
FlinkCDC实时CDC + 复杂ETL强大的流处理能力需要写Flink代码
Producer/Consumer API高度定制化场景最灵活,完全控制开发维护成本高
Debezium专业CDC(MySQL/PG/MongoDB)CDC能力最强需要额外部署

Kafka Connect实战:配置示例

// JDBC Source Connector配置
// 从MySQL读数据写入Kafka(增量同步)
{
  "name": "mysql-source-users",
  "config": {
    "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
    "connection.url": "jdbc:mysql://mysql-host:3306/app_db",
    "connection.user": "reader",
    "connection.password": "xxx",
    "table.whitelist": "users,orders",
    "mode": "incrementing",
    "incrementing.column.name": "id",
    "topic.prefix": "mysql.",
    "tasks.max": 3
  }
}
// 效果:users表的数据自动同步到Kafka的mysql.users Topic
// Debezium MySQL Source Connector配置
// 基于Binlog的CDC实时同步
{
  "name": "debezium-mysql-cdc",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "database.hostname": "mysql-host",
    "database.port": "3306",
    "database.user": "cdc_user",
    "database.password": "xxx",
    "database.server.id": "1001",
    "database.include.list": "app_db",
    "table.include.list": "app_db.users,app_db.gift_transactions",
    "topic.prefix": "cdc.",
    "schema.history.internal.kafka.bootstrap.servers": "broker1:9092",
    "schema.history.internal.kafka.topic": "schema-changes"
  }
}

我在不同公司的数据集成方案选择

公司数据源方案为什么选它
元宇宙社交MySQL → KafkaFlinkCDC下游要做复杂ETL再写Doris
元宇宙社交埋点SDK → Kafka第三方SDK直写SDK原生支持Kafka
出海硬件品牌Kafka → DatabricksDatabricks Kafka ConnectorDatabricks原生集成
短剧出海广告API → KafkaPython脚本+Producer APIAPI格式各异需要定制
短视频平台Firebase → BigQuery → S3AWS Glue跨云数据同步

可以看出,没有一种方案能覆盖所有场景。Kafka Connect适合标准化的数据搬运,FlinkCDC适合需要复杂处理的CDC场景,手写代码适合高度定制化的场景。面试时能说出你用了什么方案、为什么选它,比知道所有方案的理论知识更有价值。

面试高频追问

追问一:Kafka Connect和FlinkCDC什么时候用哪个?

如果只是简单数据搬运(MySQL→Kafka→HDFS),用Kafka Connect更省事。如果需要在中间做复杂的ETL处理(过滤、关联维表、聚合计算),用FlinkCDC,因为Flink有完整的流处理能力。我在元宇宙社交公司选FlinkCDC就是因为需要在Flink里做维表Join。

追问二:Debezium和FlinkCDC什么关系?

FlinkCDC底层集成了Debezium。Debezium负责读取数据库的Binlog/WAL,FlinkCDC在此基础上加了Flink的流处理能力(Checkpoint、状态管理、窗口计算)。如果你单独用Debezium,通常配合Kafka Connect部署;如果用FlinkCDC,Debezium是内嵌的。

追问三:Kafka Connect怎么保证Exactly-Once?

Kafka Connect支持三种语义:at-least-once(默认)、at-most-once、exactly-once(需要Connector支持事务)。大部分Source Connector保证at-least-once,下游需要自己做幂等去重。

总结

Kafka生态工具面试重点是:了解Kafka Connect的架构和适用场景、和FlinkCDC/手写代码的对比选型。记住一个选型原则:标准数据搬运用Connect、复杂ETL用FlinkCDC、高度定制用API。能结合自己的项目说清楚选了什么方案、为什么选它,面试官会觉得你有技术选型的判断力。

下一篇聊Kafka的安全和权限控制:生产环境谁都能连Kafka读写数据,这安全吗?

你们用Kafka Connect了吗?还是用FlinkCDC?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器