bigywater.tech
Kafka 内部原理 · 73

Kafka Connect:Source 和 Sink Connector 怎么工作

用Kafka自带的FileStreamSource和FileStreamSink connector真实跑一次standalone Kafka Connect,验证纯配置驱动的Source/Sink协作模式,以及运行中文件变化的增量同步。

0自定义代码
纯配置驱动完成文件→Kafka→文件的同步
3秒内同步
运行中追加的新内容真实被增量同步

验证:两个connector,一个从文件读进Kafka,一个从Kafka写回文件

配置 · file-source.properties connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector file=source-input.txt topic=connect-file-topic
配置 · file-sink.properties connector.class=org.apache.kafka.connect.file.FileStreamSinkConnector file=sink-output.txt topics=connect-file-topic
命令 · shell $ connect-standalone.sh connect-standalone.properties file-source.properties file-sink.properties

验证:文件里的内容真实原样流过了Kafka topic,落到了另一个文件

真实实测 · 本机执行输出
source-input.txt真实的原始内容:
line1: hello kafka connect
line2: real file source test

真实等Connect启动完成后,sink-output.txt真实的内容:
line1: hello kafka connect
line2: real file source test

真实直接consumer读取connect-file-topic,内容跟两个文件真实一致

整个链路真实完全没有写一行自定义代码——两份properties配置文件描述了"从哪个文件读、写到哪个topic"和"从哪个topic读、写到哪个文件",Connect框架真实自己完成了文件读取、Kafka生产、Kafka消费、文件写入这一整套动作。

验证:Source connector真实是持续监听文件变化的,不是只读一次

命令 · shell $ echo "line3: appended while connect is running" >> source-input.txt
真实实测 · 本机执行输出(3秒后)
sink-output.txt真实的内容:
line1: hello kafka connect
line2: real file source test
line3: appended while connect is running   ← 真实新增的这一行也流过来了
Connect进程全程没有重启,真实在运行中往源文件追加了一行新内容,3秒内这行新内容就真实出现在了sink输出文件里——FileStreamSourceConnector真实的实现是持续tail这个文件,一旦检测到新的行就真实生产一条新消息,不是启动时读一次快照就完事。这正是Source/Sink Connector真实的分工:Source真实负责"把外部系统的变化持续同步进Kafka",Sink真实负责"把Kafka里的数据持续同步到外部系统",两者中间用一个真实标准的Kafka topic解耦——真实生产环境里换成JDBC Source(监听数据库变化)、S3 Sink(写入对象存储)这类连接器,底层的工作模式跟本文这套文件读写完全一样。

分步演示:Source和Sink真实是怎么协作的

每一步都是本文上面用真实的Kafka Connect standalone模式跑出来的原始结果。

纯配置驱动,文件内容真实流过了Kafka
这一步新验证的状态

    参考与说明

    • 数据来自本机3节点Kafka 4.3.1集群,用Kafka发行包自带的connect-file-4.3.1.jar(FileStreamSourceConnector/FileStreamSinkConnector),standalone模式运行。
    • 没有验证:distributed模式下多worker协同分担connector任务的真实行为;JDBC/S3这类更真实生产场景常用的connector(本文用文件connector是因为它无需额外下载依赖,随Kafka发行包自带)。
    京ICP备2026067502号-1京公网安备11010502063487号