跳到主要内容
版本:2.3.8

Connector V2 功能简介

Connector V2 和 V1 之间的不同

https://github.com/apache/seatunnel/issues/1608 我们添加了 Connector V2 特性。 Connector V2 是基于SeaTunnel Connector API接口定义的连接器。不像Connector V1, V2 支持如下特性:

  • 多引擎支持 SeaTunnel Connector API 是引擎独立的API。基于这个API开发的连接器可以在多个引擎上运行。目前支持Flink和Spark引擎,后续我们会支持其它的引擎。
  • 多引擎版本支持 通过翻译层将连接器与引擎解耦,解决了大多数连接器需要修改代码才能支持新版本底层引擎的问题。
  • 流批一体 Connector V2 可以支持批处理和流处理。我们不需要为批和流分别开发连接器。
  • 多路复用JDBC/Log连接。 Connector V2支持JDBC资源复用和共享数据库日志解析。

Source Connector 特性

Source connector有一些公共的核心特性,每个source connector在不同程度上支持它们。

精确一次(exactly-once)

如果数据源中的每条数据仅由源向下游发送一次,我们认为该source connector支持精确一次(exactly-once)。

在SeaTunnel中, 我们可以保存读取的 Split 和它的 offset(当时读取的数据被分割时的位置,例如行号, 字节大小, 偏移量等) 作为检查点时的 StateSnapshot 。 如果任务重新启动, 我们会得到最后的 StateSnapshot 然后定位到上次读取的 Splitoffset,继续向下游发送数据。

例如 File, Kafka

列投影(column projection)

如果连接器支持仅从数据源读取指定列(请注意,如果先读取所有列,然后通过元数据(schema)过滤不需要的列,则此方法不是真正的列投影)

例如 JDBCSource 可以使用sql定义读取列。

KafkaSource 从主题中读取所有内容然后使用schema过滤不必要的列, 这不是真正的列投影

批(batch)

批处理作业模式,读取的数据是有界的,当所有数据读取完成后作业将停止。

流(stream)

流式作业模式,数据读取无界,作业永不停止。

并行性(parallelism)

并行执行的Source Connector支持配置 parallelism,每个并发会创建一个任务来读取数据。 在Parallelism Source Connector中,source会被分割成多个split,然后枚举器会将 split 分配给 SourceReader 进行处理。

支持用户自定义split

用户可以配置分割规则。

支持多表读取

支持在一个 SeaTunnel 作业中读取多个表。

Sink Connector 的特性

Sink connector有一些公共的核心特性,每个sink connector在不同程度上支持它们。

精确一次(exactly-once)

当任意一条数据流入分布式系统时,如果系统在整个处理过程中仅准确处理任意一条数据一次,且处理结果正确,则认为系统满足精确一次一致性。

对于sink connector,如果任何数据只写入目标一次,则sink connector支持精确一次。 通常有两种方法可以实现这一目标:

  • 目标数据库支持key去重。例如 MySQL, Kudu
  • 目标支持 XA 事务(事务可以跨会话使用,即使创建事务的程序已经结束,新启动的程序也只需要知道最后一个事务的ID就可以重新提交或回滚事务)。 然后我们可以使用 两阶段提交 来确保 * 精确一次**。 例如:File, MySQL.

cdc(更改数据捕获,change data capture)

如果sink connector支持基于主键写入行类型(INSERT/UPDATE_BEFORE/UPDATE_AFTER/DELETE),我们认为它支持cdc(更改数据捕获,change data capture)。