blob: 17152630430bdcea9ca7b86b70acafddd8560a37 [file] [log] [blame] [view]
# 常见问题解答
## SeaTunnel 支持哪些数据来源和数据目的地?
SeaTunnel 支持多种数据源来源和数据目的地,您可以在官网找到详细的列表:
SeaTunnel 支持的数据来源(Source)列表:https://seatunnel.apache.org/docs/connector-v2/source
SeaTunnel 支持的数据目的地(Sink)列表:https://seatunnel.apache.org/docs/connector-v2/sink
## SeaTunnel 是否支持批处理和流处理?
SeaTunnel 支持批流一体,SeaTunnel 可以设置批处理和流处理两种模式。您可以根据具体的业务场景和需求选择合适的处理模式。批处理适合定时数据同步场景,而流处理适合实时同步和数据变更捕获 (CDC) 场景。
## 使用 SeaTunnel 需要安装 Spark 或者 Flink 这样的引擎么?
Spark Flink 不是必需的,SeaTunnel 可以支持 ZetaSpark Flink 3 种作为同步引擎的选择,您可以选择之一就行,社区尤其推荐使用 Zeta 这种专为同步场景打造的新一代超高性能同步引擎。Zeta 被社区用户亲切的称为 “泽塔奥特曼”!
社区对 Zeta 的支持力度是最大的,功能也更丰富。
## SeaTunnel 支持的数据转换功能有哪些?
SeaTunnel 支持多种数据转换功能,包括字段映射、数据过滤、数据格式转换等。可以通过在配置文件中定义 `transform` 模块来实现数据转换。详情请参考 SeaTunnel [Transform 文档](https://seatunnel.apache.org/docs/transform-v2)。
## SeaTunnel 是否可以自定义数据清洗规则?
SeaTunnel 支持自定义数据清洗规则。可以在 `transform` 模块中配置自定义规则,例如清理脏数据、删除无效记录或字段转换。
## SeaTunnel 是否支持实时增量同步?
SeaTunnel 支持增量数据同步。例如通过 CDC 连接器实现对数据库的增量同步,适用于需要实时捕获数据变更的场景。
## SeaTunnel 目前支持哪些数据源的 CDC ?
目前支持 MongoDB CDCMySQL CDCOpengauss CDCOracle CDCPostgreSQL CDCSql Server CDCTiDB CDC等,更多请查阅[Source](https://seatunnel.apache.org/docs/connector-v2/source)。
## SeaTunnel CDC 同步需要的权限如何开启?
这样就可以了。
这里多说一句,连接器对应的 cdc 权限开启步骤在官网都有写,请参照 SeaTunnel 对应的官网操作即可
## SeaTunnel 支持从 MySQL 备库进行 CDC 么?日志如何拉取?
支持,是通过订阅 MySQL binlog 日志方式到同步服务器上解析 binlog 日志方式进行
## SeaTunnel 是否支持无主键表的 CDC 同步?
不支持无主键表的 cdc 同步。原因如下:
比如上游有 2 条一模一样的数据,然后上游删除或修改了一条,下游由于无法区分到底是哪条需要删除或修改,会出现这 2 条都被删除或修改的情况。
没主键要类似去重的效果本身有点儿自相矛盾,就像辨别西游记里的真假悟空,到底哪个是真的
## SeaTunnel 是否支持自动建表?
在同步任务启动之前,可以为目标端已有的表结构选择不同的处理方案。是通过 `schema_save_mode` 参数来控制的。
`schema_save_mode` 有以下几种方式可选:
- **`RECREATE_SCHEMA`**:当表不存在时会创建,若表已存在则删除并重新创建。
- **`CREATE_SCHEMA_WHEN_NOT_EXIST`**:当表不存在时会创建,若表已存在则跳过创建。
- **`ERROR_WHEN_SCHEMA_NOT_EXIST`**:当表不存在时会报错。
- **`IGNORE`**:忽略对表的处理。
目前很多 connector 已经支持了自动建表,请参考对应的 connector 文档,这里拿 Jdbc 举例,请参考 [Jdbc sink](https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc#schema_save_mode-enum)
## SeaTunnel 是否支持数据同步任务开始前对已有数据进行处理?
在同步任务启动之前,可以为目标端已有的数据选择不同的处理方案。是通过 `data_save_mode` 参数来控制的。
`data_save_mode` 有以下几种可选项:
- **`DROP_DATA`**:保留数据库结构,删除数据。
- **`APPEND_DATA`**:保留数据库结构,保留数据。
- **`CUSTOM_PROCESSING`**:用户自定义处理。
- **`ERROR_WHEN_DATA_EXISTS`**:当存在数据时,报错。
目前很多 connector 已经支持了对已有数据进行处理,请参考对应的 connector 文档,这里拿 Jdbc 举例,请参考 [Jdbc sink](https://seatunnel.apache.org/docs/connector-v2/sink/Jdbc#data_save_mode-enum)
## SeaTunnel 是否支持精确一致性管理?
SeaTunnel 支持一部分数据源的精确一致性,例如支持 MySQLPostgreSQL 等数据库的事务写入,确保数据在同步过程中的一致性,另外精确一致性也要看数据库本身是否可以支持
## SeaTunnel 可以定期执行任务吗?
您可以通过使用 linux 自带 cron 能力来实现定时数据同步任务,也可以结合 DolphinScheduler 等调度工具实现复杂的定时任务管理。
## 我有一个问题,我自己无法解决
我在使用 SeaTunnel 时遇到了问题,无法自行解决。 我应该怎么办?有以下几种方式
1、在[问题列表](https://github.com/apache/seatunnel/issues)或[邮件列表](https://lists.apache.org/list.html?dev@seatunnel.apache.org)中搜索看看是否有人已经问过同样的问题并得到答案。
2、如果您找不到问题的答案,您可以通过[这些方式](https://github.com/apache/seatunnel#contact-us)联系社区成员寻求帮助。
3、中国用户可以添加微信群助手:seatunnel1,加入社区交流群,也欢迎大家关注微信公众号:seatunnel
## 如何声明变量?
您想知道如何在 SeaTunnel 的配置中声明一个变量,然后在运行时动态替换该变量的值吗? 该功能常用于定时或非定时离线处理,以替代时间、日期等变量。 用法如下:
在配置中配置变量名称。 下面是一个sql转换的例子(实际上,配置文件中任何地方“key = value”中的值都可以使用变量替换):
```
...
transform {
Sql {
query = "select * from dual where city ='${city}' and dt = '${date}'"
}
}
...
```
以使用 SeaTunnel Zeta Local模式为例,启动命令如下:
```bash
$SEATUNNEL_HOME/bin/seatunnel.sh \
-c $SEATUNNEL_HOME/config/your_app.conf \
-m local[2] \
-i city=Singapore \
-i date=20231110
```
您可以使用参数“-i”或“--variable”后跟“key=value”来指定变量的值,其中key需要与配置中的变量名称相同。详情可以参考:https://seatunnel.apache.org/docs/concept/config
## 如何在配置文件中写入多行文本的配置项?
当配置的文本很长并且想要将其换行时,您可以使用三个双引号来指示其开始和结束:
```
var = """
Apache SeaTunnel is a
next-generation high-performance,
distributed, massive data integration tool.
"""
```
## 如何实现多行文本的变量替换?
在多行文本中进行变量替换有点麻烦,因为变量不能包含在三个双引号中:
```
var = """
your string 1
"""${you_var}""" your string 2"""
```
请参阅:[lightbend/config#456](https://github.com/lightbend/config/issues/456)。
## 如果想学习 SeaTunnel 的源代码,应该从哪里开始?
SeaTunnel 拥有完全抽象、结构化的非常优秀的架构设计和代码实现,很多用户都选择 SeaTunnel 作为学习大数据架构的方式。 您可以从`seatunnel-examples`模块开始了解和调试源代码:SeaTunnelEngineLocalExample.java
具体参考:https://seatunnel.apache.org/docs/contribution/setup
针对中国用户,如果有伙伴想贡献自己的一份力量让 SeaTunnel 更好,特别欢迎加入社区贡献者种子群,欢迎添加微信:davidzollo,添加时请注明 "参与开源共建", 群仅仅用于技术交流, 重要的事情讨论还请发到 dev@seatunnel.apache.org 邮件里进行讨论。
## 如果想开发自己的 source、sink、transform 时,是否需要了解 SeaTunnel 所有源代码?
不需要,您只需要关注 sourcesinktransform 对应的接口即可。
如果你想针对 SeaTunnel API 开发自己的连接器(Connector V2),请查看**[Connector Development Guide](https://github.com/apache/seatunnel/blob/dev/seatunnel-connectors-v2/README.zh.md)** 。