部署SeaTunnel分布式集群

深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台

一、部署SeaTunnel引擎

SeaTunnel Engine 是 SeaTunnel 的默认引擎。SeaTunnel的安装包中已经包含了SeaTunnel Engine的所有内容。

二、配置环境变量

在/etc/profile.d/seatunnel.sh中配置环境变量

export SEATUNNEL_HOME=${seatunnel install path}
export PATH=$PATH:$SEATUNNEL_HOME/bin

三、配置 SeaTunnel Engine JVM

SeaTunnel Engine 支持两种设置 jvm 选项的方式。

  1. 将 JVM 选项添加到$SEATUNNEL_HOME/bin/seatunnel-cluster.sh第一行
JAVA_OPTS="-Xms2G -Xmx2G"
  1. 启动 SeaTunnel 引擎时添加 JVM 选项。例如seatunnel-cluster.sh -DJvmOption=“-Xms2G -Xmx2G”

四、配置SeaTunnel

SeaTunnel Engine提供了很多功能,需要在seatunnel.yaml中进行配置。

1.备份

SeaTunnel Engine 基于Hazelcast IMDG实现集群管理。集群的状态数据(作业运行状态,资源状态)存储在Hazelcast IMap中。Hazelcast IMap 中保存的数据将分布存储在集群的所有节点中。Hazelcast 会对存储在 Imap 中的数据进行分区。每个分区可以指定备份的数量。因此,SeaTunnel Engine可以在不使用其他服务(例如zookeeper)的情况下实现集群HA。

用于backup count定义同步备份的数量。例如,如果设置为 1,分区的备份将放在另外一个成员上。如果是2,就会放在另外两个成员身上。

我们建议 的backup-count值为min(1, max(5, N/2))。N是集群节点的编号。

seatunnel:
    engine:
        backup-count: 1
        # other config

2.Slots

Slots的数量决定了集群节点可以并行运行的TaskGroups的数量。SeaTunnel Engine是一个数据同步引擎,大部分作业都是IO密集型的。

建议使用动态插槽。

seatunnel:
    engine:
        slot-service:
            dynamic-slot: true
        # other config

3.检查点

与 Flink 一样,SeaTunnel Engine 支持 Chandy–Lamport 算法。因此,SeaTunnel Engine可以实现数据同步,不丢失数据,不重复数据。

间隔:

  • 两个检查点之间的间隔,单位是毫秒。如果在作业配置文件checkpoint.interval中配置了该参数env,则此处设置的值将被覆盖。

暂停:

  • 检查点超时。如果在超时期限内无法完成检查点,则会触发检查点故障。

最大并发:

  • 最多可以同时执行多少个检查点。

可容忍的失败

  • 检查点失败后的最大重试次数。
seatunnel:
    engine:
        backup-count: 1
        print-execution-info-interval: 10
        slot-service:
            dynamic-slot: true
        checkpoint:
            interval: 300000
            timeout: 10000
            max-concurrent: 1
            tolerable-failure: 2

五、配置SeaTunnel引擎

文件中的所有 SeaTunnel 引擎服务器配置hazelcast.yaml。

SeaTunnel Engine 节点使用集群名称来判断对方是否与自己是一个集群。如果两个节点之间的集群名称不同,SeaTunnel Engine 将拒绝服务请求。

基于Hazelcast,SeaTunnel Engine 集群是运行 SeaTunnel Engine Server 的集群成员网络。集群成员自动连接在一起形成一个集群。这种自动加入是通过集群成员用来相互查找的各种发现机制进行的。

请注意,集群形成后,无论使用何种发现机制,集群成员之间的通信始终通过 TCP/IP。

SeaTunnel Engine 使用以下发现机制。可以将 SeaTunnel Engine 配置为完整的 TCP/IP 集群。

hazelcast:
  cluster-name: seatunnel
  network:
    join:
      tcp-ip:
        enabled: true
        member-list:
          - hostname1
    port:
      auto-increment: false
      port: 5801
  properties:
    hazelcast.logging.type: log4j2

TCP 是我们在独立 SeaTunnel Engine 集群中的建议方式。

类型

imap 持久化的类型,目前只支持hdfs.

命名空间

用于区分不同业务的数据存储位置,如OSS bucket名称。

集群名称

这个参数主要是用来做集群隔离的,我们可以用这个来区分不同的集群,比如cluster1,cluster2,这个也用来区分不同的业务

fs.defaultFS

我们使用hdfs api读写文件,所以使用这个存储需要提供hdfs配置

如果你使用 HDFS,你可以这样配置:

map:
    engine*:
       map-store:
         enabled: true
         initial-mode: EAGER
         factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory
         properties:
           type: hdfs
           namespace: /tmp/seatunnel/imap
           clusterName: seatunnel-cluster
           fs.defaultFS: hdfs://localhost:9000

如果没有 HDFS 并且您的集群只有一个节点,您可以像这样配置使用本地文件:

map:
    engine*:
       map-store:
         enabled: true
         initial-mode: EAGER
         factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory
         properties:
           type: hdfs
           namespace: /tmp/seatunnel/imap
           clusterName: seatunnel-cluster
           fs.defaultFS: file:///

六、配置 SeaTunnel 引擎服务器

cluster-name客户端必须与 SeaTunnel Engine相同。否则,SeaTunnel Engine 将拒绝客户端请求。

集群成员

所有SeaTunnel Engine Server Node地址都需要添加到这里。

hazelcast-client:
  cluster-name: seatunnel
  properties:
      hazelcast.logging.type: log4j2
  network:
    cluster-members:
      - hostname1:5801

启动SeaTunnel Engine Server

mkdir -p $SEATUNNEL_HOME/logs
nohup bin/seatunnel-cluster.sh 2>&1 &

日志将写入$SEATUNNEL_HOME/logs/seatunnel-engine-server.log

只需要将$SEATUNNEL_HOMESeaTunnel Engine节点上的目录复制到Client节点,并配置SEATUNNEL_HOME类似的SeaTunnel Engine Server节点即可。

七、部署SeaTunnel分布式集群

这是在生产环境中最推荐使用 SeaTunnel Engine 的方式。该模式支持SeaTunnel Engine的全部功能,集群模式的性能和稳定性会更好。

集群模式下,需要先部署SeaTunnel Engine集群,客户端将作业提交给SeaTunnel Engine集群运行。

提交命令

$SEATUNNEL_HOME/bin/seatunnel.sh --config $SEATUNNEL_HOME/config/v2.batch.config.template

八、检查点存储

Checkpoint是一种容错恢复机制。这种机制保证了程序运行时,即使突然遇到异常,也能自行恢复。

检查点
Checkpoint Storage是一种存储检查点数据的存储机制。

SeaTunnel Engine 支持以下检查点存储类型:

  • HDFS(OSS、S3、HDFS、本地文件)
  • LocalFile(本机),(已弃用:改用 Hdfs(LocalFile)。

我们使用微内核设计模式将检查点存储模块与引擎分离。这允许用户实现自己的检查点存储模块。

checkpoint-storage-api是checkpoint存储模块API,定义了checkpoint存储模块的接口。

如果要实现自己的checkpoint存储模块,需要实现CheckpointStorage并提供相应的CheckpointStorageFactory实现。

检查点存储
模块的配置seatunnel-server在seatunnel.yaml文件中。


seatunnel:
    engine:
        checkpoint:
            storage:
                type: hdfs #plugin name of checkpoint storage, we support hdfs(S3, local, hdfs), localfile (native local file) is the default, but this plugin is de
              # plugin configuration
                plugin-config: 
                  namespace: #checkpoint storage parent path, the default value is /seatunnel/checkpoint/
                  K1: V1 # plugin other configuration
                  K2: V2 # plugin other configuration   

注意:命名空间必须以“/”结尾。

如果你使用 HDFS,你可以这样配置:

seatunnel:
  engine:
    checkpoint:
      storage:
        type: hdfs
        max-retained: 3
        plugin-config:
          storage.type: hdfs
          fs.defaultFS: hdfs://localhost:9000
          // if you used kerberos, you can config like this:
          kerberosPrincipal: your-kerberos-principal
          kerberosKeytab: your-kerberos-keytab  
seatunnel:
  engine:
    checkpoint:
      interval: 6000
      timeout: 7000
      max-concurrent: 5
      tolerable-failure: 2
      storage:
        type: hdfs
        max-retained: 3
        plugin-config:
          storage.type: hdfs
          fs.defaultFS: file:/// # Ensure that the directory has written permission 

九、TCP

TCP网络
如果多播不是您环境的首选发现方式,那么您可以将 SeaTunnel Engine 配置为完整的 TCP/IP 集群。当您将 SeaTunnel Engine 配置为通过 TCP/IP 发现成员时,您必须将所有或部分成员的主机名和/或 IP 地址列为集群成员。您不必列出所有这些集群成员,但当新成员加入时,至少有一个列出的成员必须在集群中处于活动状态。

要将 Hazelcast 配置为完整的 TCP/IP 集群,请设置以下配置元素。有关 TCP/IP 发现配置元素的完整描述,请参阅 tcp-ip 元素部分。

  • 将 tcp-ip 元素的 enabled 属性设置为 true。
  • 在 tcp-ip 元素中提供您的成员元素。

以下是示例声明性配置。

hazelcast:
  network:
    join:
      tcp-ip:
        enabled: true
        member-list:
          - machine1
          - machine2
          - machine3:5799
          - 192.168.1.0-7
          - 192.168.1.21

如上所示,您可以为成员元素提供 IP 地址或主机名。您还可以提供 IP 地址范围,例如192.168.1.0-7.

除了如上所示逐行提供成员,您还可以选择使用成员元素并编写以逗号分隔的 IP 地址,如下所示。

192.168.1.0-7,192.168.1.21

如果您不为成员提供端口,Hazelcast 会自动尝试端口5701,5702依此类推。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最笨的羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值