|
| 1 | +--- |
| 2 | + |
| 3 | +sidebar_position: 4 |
| 4 | +------------------- |
| 5 | + |
| 6 | +# 部署 SeaTunnel Engine |
| 7 | + |
| 8 | +## 1. 下载 |
| 9 | + |
| 10 | +SeaTunnel Engine 是 SeaTunnel 的默认引擎。SeaTunnel 的安装包已经包含了 SeaTunnel Engine 的所有内容。 |
| 11 | + |
| 12 | +## 2 配置 SEATUNNEL_HOME |
| 13 | + |
| 14 | +您可以通过添加 `/etc/profile.d/seatunnel.sh` 文件来配置 `SEATUNNEL_HOME` 。`/etc/profile.d/seatunnel.sh` 的内容如下: |
| 15 | + |
| 16 | +``` |
| 17 | +export SEATUNNEL_HOME=${seatunnel install path} |
| 18 | +export PATH=$PATH:$SEATUNNEL_HOME/bin |
| 19 | +``` |
| 20 | + |
| 21 | +## 3. 配置 SeaTunnel Engine JVM 选项 |
| 22 | + |
| 23 | +SeaTunnel Engine 支持两种设置 JVM 选项的方法。 |
| 24 | + |
| 25 | +1. 将 JVM 选项添加到 `$SEATUNNEL_HOME/bin/seatunnel-cluster.sh`. |
| 26 | + |
| 27 | + 修改 `$SEATUNNEL_HOME/bin/seatunnel-cluster.sh` 文件,并在第一行添加 `JAVA_OPTS="-Xms2G -Xmx2G"`. |
| 28 | + |
| 29 | +2. 在启动 SeaTunnel Engine 时添加 JVM 选项。例如 `seatunnel-cluster.sh -DJvmOption="-Xms2G -Xmx2G"` |
| 30 | + |
| 31 | +## 4. 配置 SeaTunnel Engine |
| 32 | + |
| 33 | +SeaTunnel Engine 提供许多功能,需要在 `seatunnel.yaml` 中进行配置。. |
| 34 | + |
| 35 | +### 4.1 备份计数 |
| 36 | + |
| 37 | +SeaTunnel Engine 基于 [Hazelcast IMDG](https://docs.hazelcast.com/imdg/4.1/) 实现集群管理。集群的状态数据(作业运行状态、资源状态)存储在 [Hazelcast IMap](https://docs.hazelcast.com/imdg/4.1/data-structures/map)。 |
| 38 | +存储在 Hazelcast IMap 中的数据将在集群的所有节点上分布和存储。Hazelcast 会分区存储在 Imap 中的数据。每个分区可以指定备份数量。 |
| 39 | +因此,SeaTunnel Engine 可以实现集群 HA,无需使用其他服务(例如 zookeeper)。 |
| 40 | + |
| 41 | +`backup count` 是定义同步备份数量的参数。例如,如果设置为 1,则分区的备份将放置在一个其他成员上。如果设置为 2,则将放置在两个其他成员上。 |
| 42 | + |
| 43 | +我们建议 `backup-count` 的值为 `min(1, max(5, N/2))`。 `N` 是集群节点的数量。 |
| 44 | + |
| 45 | +```yaml |
| 46 | +seatunnel: |
| 47 | + engine: |
| 48 | + backup-count: 1 |
| 49 | + # 其他配置 |
| 50 | +``` |
| 51 | + |
| 52 | +### 4.2 插槽服务 |
| 53 | + |
| 54 | +插槽数量决定了集群节点可以并行运行的任务组数量。SeaTunnel Engine 是一个数据同步引擎,大多数作业都是 IO 密集型的。 |
| 55 | +建议使用动态插槽。 |
| 56 | + |
| 57 | +```yaml |
| 58 | +seatunnel: |
| 59 | + engine: |
| 60 | + slot-service: |
| 61 | + dynamic-slot: true |
| 62 | + # 其他配置 |
| 63 | +``` |
| 64 | + |
| 65 | +### 4.3 检查点管理器 |
| 66 | + |
| 67 | +与 Flink 一样,SeaTunnel Engine 支持 Chandy–Lamport 算法。因此,可以实现无数据丢失和重复的数据同步。 |
| 68 | + |
| 69 | +**interval** |
| 70 | + |
| 71 | +两个检查点之间的间隔,单位是毫秒。如果在作业配置文件的 `env` 中配置了 `checkpoint.interval` 参数,则此处设置的值将覆盖它。 |
| 72 | + |
| 73 | +**timeout** |
| 74 | + |
| 75 | +检查点的超时时间。如果在超时时间内无法完成检查点,则会触发检查点失败。因此,作业将被恢复。 |
| 76 | + |
| 77 | +示例 |
| 78 | + |
| 79 | +```yaml |
| 80 | +seatunnel: |
| 81 | + engine: |
| 82 | + backup-count: 1 |
| 83 | + print-execution-info-interval: 10 |
| 84 | + slot-service: |
| 85 | + dynamic-slot: true |
| 86 | + checkpoint: |
| 87 | + interval: 300000 |
| 88 | + timeout: 10000 |
| 89 | +``` |
| 90 | + |
| 91 | +**checkpoint storage** |
| 92 | + |
| 93 | +有关检查点存储的信息,您可以查看 [checkpoint storage](checkpoint-storage.md) |
| 94 | + |
| 95 | +### 4.4 历史作业过期配置 |
| 96 | + |
| 97 | +每个完成的作业的信息,如状态、计数器和错误日志,都存储在 IMap 对象中。随着运行作业数量的增加,内存会增加,最终内存将溢出。因此,您可以调整 `history-job-expire-minutes` 参数来解决这个问题。此参数的时间单位是分钟。默认值是 1440 分钟,即一天。 |
| 98 | + |
| 99 | +示例 |
| 100 | + |
| 101 | +```yaml |
| 102 | +seatunnel: |
| 103 | + engine: |
| 104 | + history-job-expire-minutes: 1440 |
| 105 | +``` |
| 106 | + |
| 107 | +### 4.5 类加载器缓存模式 |
| 108 | + |
| 109 | +此配置主要解决不断创建和尝试销毁类加载器所导致的资源泄漏问题。 |
| 110 | +如果您遇到与元空间溢出相关的异常,您可以尝试启用此配置。 |
| 111 | +为了减少创建类加载器的频率,在启用此配置后,SeaTunnel 在作业完成时不会尝试释放相应的类加载器,以便它可以被后续作业使用,也就是说,当运行作业中使用的 Source/Sink 连接器类型不是太多时,它更有效。 |
| 112 | +默认值是 false。 |
| 113 | +示例 |
| 114 | + |
| 115 | +```yaml |
| 116 | +seatunnel: |
| 117 | + engine: |
| 118 | + classloader-cache-mode: true |
| 119 | +``` |
| 120 | + |
| 121 | +## 5. 配置 SeaTunnel Engine 服务 |
| 122 | + |
| 123 | +所有 SeaTunnel Engine 服务配置都在 `hazelcast.yaml` 文件中. |
| 124 | + |
| 125 | +### 5.1 集群名称 |
| 126 | + |
| 127 | +SeaTunnel Engine 节点使用 `cluster-name` 来确定另一个节点是否与自己在同一集群中。如果两个节点之间的集群名称不同,SeaTunnel 引擎将拒绝服务请求。 |
| 128 | + |
| 129 | +### 5.2 网络 |
| 130 | + |
| 131 | +基于 [Hazelcast](https://docs.hazelcast.com/imdg/4.1/clusters/discovery-mechanisms), 一个 SeaTunnel Engine 集群是由运行 SeaTunnel Engine 服务器的集群成员组成的网络。 集群成员自动加入一起形成集群。这种自动加入是通过集群成员使用的各种发现机制来相互发现的。 |
| 132 | + |
| 133 | +请注意,集群形成后,集群成员之间的通信始终通过 TCP/IP 进行,无论使用的发现机制如何。 |
| 134 | + |
| 135 | +SeaTunnel Engine 使用以下发现机制。 |
| 136 | + |
| 137 | +#### TCP |
| 138 | + |
| 139 | +您可以将 SeaTunnel Engine 配置为完整的 TCP/IP 集群。有关配置详细信息,请参阅 [Discovering Members by TCP section](tcp.md)。 |
| 140 | + |
| 141 | +一个示例如下 `hazelcast.yaml` |
| 142 | + |
| 143 | +```yaml |
| 144 | +hazelcast: |
| 145 | + cluster-name: seatunnel |
| 146 | + network: |
| 147 | + join: |
| 148 | + tcp-ip: |
| 149 | + enabled: true |
| 150 | + member-list: |
| 151 | + - hostname1 |
| 152 | + port: |
| 153 | + auto-increment: false |
| 154 | + port: 5801 |
| 155 | + properties: |
| 156 | + hazelcast.logging.type: log4j2 |
| 157 | +``` |
| 158 | + |
| 159 | +TCP 是我们建议在独立 SeaTunnel Engine 集群中使用的方式。 |
| 160 | + |
| 161 | +另一方面,Hazelcast 提供了一些其他的服务发现方法。有关详细信息,请参阅 [hazelcast network](https://docs.hazelcast.com/imdg/4.1/clusters/setting-up-clusters) |
| 162 | + |
| 163 | +### 5.3 映射 |
| 164 | + |
| 165 | +仅在映射上配置时,MapStores 才会连接到外部数据存储。本主题解释了如何使用 MapStore 配置映射。有关详细信息,请参阅 [hazelcast map](https://docs.hazelcast.com/imdg/4.2/data-structures/map) |
| 166 | + |
| 167 | +**type** |
| 168 | + |
| 169 | +imap 持久化的类型,目前仅支持 `hdfs`。 |
| 170 | + |
| 171 | +**namespace** |
| 172 | + |
| 173 | +它用于区分不同业务的数据存储位置,如 OSS 存储桶名称。 |
| 174 | + |
| 175 | +**clusterName** |
| 176 | + |
| 177 | +此参数主要用于集群隔离, 我们可以使用它来区分不同的集群,如 cluster1、cluster2,这也用于区分不同的业务。 |
| 178 | + |
| 179 | +**fs.defaultFS** |
| 180 | + |
| 181 | +我们使用 hdfs api 读写文件,因此使用此存储需要提供 hdfs 配置。 |
| 182 | + |
| 183 | +如果您使用 HDFS,可以像这样配置: |
| 184 | + |
| 185 | +```yaml |
| 186 | +map: |
| 187 | + engine*: |
| 188 | + map-store: |
| 189 | + enabled: true |
| 190 | + initial-mode: EAGER |
| 191 | + factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory |
| 192 | + properties: |
| 193 | + type: hdfs |
| 194 | + namespace: /tmp/seatunnel/imap |
| 195 | + clusterName: seatunnel-cluster |
| 196 | + storage.type: hdfs |
| 197 | + fs.defaultFS: hdfs://localhost:9000 |
| 198 | +``` |
| 199 | + |
| 200 | +如果没有 HDFS,并且您的集群只有一个节点,您可以像这样配置使用本地文件: |
| 201 | + |
| 202 | +```yaml |
| 203 | +map: |
| 204 | + engine*: |
| 205 | + map-store: |
| 206 | + enabled: true |
| 207 | + initial-mode: EAGER |
| 208 | + factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory |
| 209 | + properties: |
| 210 | + type: hdfs |
| 211 | + namespace: /tmp/seatunnel/imap |
| 212 | + clusterName: seatunnel-cluster |
| 213 | + storage.type: hdfs |
| 214 | + fs.defaultFS: file:/// |
| 215 | +``` |
| 216 | + |
| 217 | +如果您使用 OSS,可以像这样配置: |
| 218 | + |
| 219 | +```yaml |
| 220 | +map: |
| 221 | + engine*: |
| 222 | + map-store: |
| 223 | + enabled: true |
| 224 | + initial-mode: EAGER |
| 225 | + factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory |
| 226 | + properties: |
| 227 | + type: hdfs |
| 228 | + namespace: /tmp/seatunnel/imap |
| 229 | + clusterName: seatunnel-cluster |
| 230 | + storage.type: oss |
| 231 | + block.size: block size(bytes) |
| 232 | + oss.bucket: oss://bucket name/ |
| 233 | + fs.oss.accessKeyId: OSS access key id |
| 234 | + fs.oss.accessKeySecret: OSS access key secret |
| 235 | + fs.oss.endpoint: OSS endpoint |
| 236 | + fs.oss.credentials.provider: org.apache.hadoop.fs.aliyun.oss.AliyunCredentialsProvider |
| 237 | +``` |
| 238 | + |
| 239 | +## 6. 配置 SeaTunnel Engine 客户端 |
| 240 | + |
| 241 | +所有 SeaTunnel Engine 客户端的配置都在 `hazelcast-client.yaml` 里。 |
| 242 | + |
| 243 | +### 6.1 cluster-name |
| 244 | + |
| 245 | +客户端必须与 SeaTunnel Engine 具有相同的 `cluster-name`。否则,SeaTunnel Engine 将拒绝客户端的请求。 |
| 246 | + |
| 247 | +### 6.2 网络 |
| 248 | + |
| 249 | +**cluster-members** |
| 250 | + |
| 251 | +需要将所有 SeaTunnel Engine 服务器节点的地址添加到这里。 |
| 252 | + |
| 253 | +```yaml |
| 254 | +hazelcast-client: |
| 255 | + cluster-name: seatunnel |
| 256 | + properties: |
| 257 | + hazelcast.logging.type: log4j2 |
| 258 | + network: |
| 259 | + cluster-members: |
| 260 | + - hostname1:5801 |
| 261 | +``` |
| 262 | + |
| 263 | +## 7. 启动 SeaTunnel Engine 服务器节点 |
| 264 | + |
| 265 | +可以通过守护进程使用 `-d` 参数启动。 |
| 266 | + |
| 267 | +```shell |
| 268 | +mkdir -p $SEATUNNEL_HOME/logs |
| 269 | +./bin/seatunnel-cluster.sh -d |
| 270 | +``` |
| 271 | + |
| 272 | +日志将写入 `$SEATUNNEL_HOME/logs/seatunnel-engine-server.log` |
| 273 | + |
| 274 | +## 8. 安装 SeaTunnel Engine 客户端 |
| 275 | + |
| 276 | +您只需将 SeaTunnel Engine 节点上的 `$SEATUNNEL_HOME` 目录复制到客户端节点,并像 SeaTunnel Engine 服务器节点一样配置 `SEATUNNEL_HOME`。 |
| 277 | + |
0 commit comments