配置文件介绍

在 SeaTunnel 中,最重要的是配置文件,通过它,用户可以定制自己的数据同步需求,以最大程度地发挥 SeaTunnel 的潜力。

接下来,我将介绍如何配置配置文件。

配置文件的主要格式是 HOCON(Human-Optimized Config Object Notation),关于此格式的更多详细信息,您可以参考 HOCON-GUIDE。顺便提一下,我们也支持 JSON 格式,但是您应该知道配置文件的名称应该以 .json 结尾。

示例

在继续阅读之前,您可以在这里和分发包的 config 目录中找到配置文件的示例。

配置文件结构

配置文件将类似于下面的示例。

hocon

env {
  job.mode = "BATCH"
}

source {
  FakeSource {
    result_table_name = "fake"
    row.num = 100
    schema = {
      fields {
        name = "string"
        age = "int"
        card = "int"
      }
    }
  }
}

transform {
  Filter {
    source_table_name = "fake"
    result_table_name = "fake1"
    fields = [name, card]
  }
}

sink {
  Clickhouse {
    host = "clickhouse:8123"
    database = "default"
    table = "seatunnel_console"
    fields = ["name", "card"]
    username = "default"
    password = ""
    source_table_name = "fake1"
  }
}

这是一个简单的配置文件示例,其中定义了执行环境、数据源、转换和汇的设置。配置文件的结构将根据您的需求进行调整,以满足特定的数据同步任务。

json

{
  "env": {
    "job.mode": "batch"
  },
  "source": [
    {
      "plugin_name": "FakeSource",
      "result_table_name": "fake",
      "row.num": 100,
      "schema": {
        "fields": {
          "name": "string",
          "age": "int",
          "card": "int"
        }
      }
    }
  ],
  "transform": [
    {
      "plugin_name": "Filter",
      "source_table_name": "fake",
      "result_table_name": "fake1",
      "fields": ["name", "card"]
    }
  ],
  "sink": [
    {
      "plugin_name": "Clickhouse",
      "host": "clickhouse:8123",
      "database": "default",
      "table": "seatunnel_console",
      "fields": ["name", "card"],
      "username": "default",
      "password": "",
      "source_table_name": "fake1"
    }
  ]
}

正如您所见,配置文件包含几个部分:env、source、transform、sink。不同的模块具有不同的功能。在了解了这些模块之后,您将了解 SeaTunnel 的工作原理。

env(环境)

用于添加一些引擎可选参数,无论使用哪个引擎(Spark或Flink),都应该在此处填写相应的可选参数。

source(数据源)

数据源用于定义 SeaTunnel 需要获取数据的位置,并将获取的数据用于下一步。可以同时定义多个数据源。目前支持的数据源请查看SeaTunnel的Source。每个数据源都有自己的具体参数来定义如何获取数据,SeaTunnel还提取了每个数据源将使用的参数,比如 result_table_name 参数,用于指定当前数据源生成的数据的名称,方便其他模块在后续使用。

transform(转换)

当我们有了数据源时,可能需要进一步处理数据,因此我们有了转换模块。

当然,这里使用了可能这个词,这意味着我们也可以将转换视为不存在,直接从源到汇。如下所示。

env {
  job.mode = "BATCH"
}

source {
  FakeSource {
    result_table_name = "fake"
    row.num = 100
    schema = {
      fields {
        name = "string"
        age = "int"
        card = "int"
      }
    }
  }
}

sink {
  Clickhouse {
    host = "clickhouse:8123"
    database = "default"
    table = "seatunnel_console"
    fields = ["name", "age", "card"]
    username = "default"
    password = ""
    source_table_name = "fake1"
  }
}

与 source 一样,transform 也有属于每个模块的具体参数。目前支持的 transform 请查看 SeaTunnel 的 Transform V2

sink(汇)

SeaTunnel 的目标是将数据从一个地方同步到另一个地方,因此定义数据如何以及在哪里写入是至关重要的。

通过 SeaTunnel 提供的 sink 模块,您可以快速而高效地完成此操作。Sink 和 source 非常相似,但区别在于读取和写入。因此,请查看我们支持的 sinks。

其他

当定义了多个源和多个汇时,您会发现每个汇读取哪些数据,每个转换读取哪些数据?我们使用了 result_table_namesource_table_name 两个关键配置。

每个 source 模块将配置一个 result_table_name 来指示数据源生成的数据源的名称,其他 transform 和 sink 模块可以使用 source_table_name 来引用相应的数据源名称,表示我要读取用于处理的数据。

然后,作为中间处理模块的 transform 可以同时使用 result_table_namesource_table_name 配置。

但是您会发现,在上述示例配置中,并非每个模块都配置了这两个参数,因为在 SeaTunnel 中有一个默认的约定,如果未配置这两个参数,那么将使用上一节点的最后一个模块生成的数据。

在只有一个源时,这样做会更加方便。

拓展阅读

https://seatunnel.apache.org/docs/2.3.3/start-v2/locally/quick-start-flink

https://seatunnel.apache.org/docs/2.3.3/start-v2/locally/quick-start-spark

参考资料

https://github.com/apache/seatunnel

https://seatunnel.apache.org/docs/2.3.3/about