首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
SeaTunnel Kubernetes 分离集群模式(Separated Cluster Mode)完整部署指南:Master/Worker 角色分离、HA 配置与生产实践
📅 2026/9/19 17:18:18
✍️ 爱科研究院
👁 阅读 3,247
数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载导读本文讲解如何在 Kubernetes 上以分离集群模式Separated Cluster Mode部署 SeaTunnel EngineMaster 与 Worker 分别运行在独立进程中Master 负责作业调度、REST API、任务提交与 IMap 状态存储Worker 专职执行任务。这是 SeaTunnel 在 Kubernetes 生产环境中推荐的部署方式。读完本文你将掌握按角色拆分 ConfigMap 的完整配置、Hazelcast API/DNS 两种成员发现方式、StatefulSet Headless Service 的 HA 拓扑搭建、健康检查与优雅停止的最佳实践以及 Worker 无感扩缩容的运维方法。什么是分离集群模式在分离集群模式中SeaTunnel Engine 的 Master 与 Worker 分别运行在独立进程中职责严格分离Master负责作业调度、REST API、任务提交和 IMap 状态存储。它参与 Hazelcast 集群的选主Master 选举并承载引擎的分布式状态IMap。Worker负责执行任务。不参与 Master 选举也不存储 IMap 数据因此可以在不承担协调职责的前提下按需横向扩缩容。从启动脚本 seatunnel-cluster.sh 的源码可以看出这种角色机制是如何落地的脚本通过-r/--role参数接收master、worker或默认的master_and_worker并据此选择不同的配置与日志文件-r master加载hazelcast-master.yaml与jvm_master_options日志输出到seatunnel-engine-master.out-r worker加载hazelcast-worker.yaml与jvm_worker_options日志输出到seatunnel-engine-worker.out默认不带-r即混合集群模式加载hazelcast.yaml与jvm_options。Kubernetes 部署中正是通过 StatefulSet 的 command 传入-r master或-r worker来固定每个 Pod 的角色这一点在仓库 config/hazelcast-master.yaml 与 config/hazelcast-worker.yaml 的差异上也有体现Master 配置开启 REST API 并定义 IMap 的 MapStore 持久化而 Worker 配置额外通过member-attributes声明rule: worker供引擎识别 Worker 成员。为什么生产环境推荐这种模式分离集群模式的价值在于角色解耦Master 可以保持较小的、稳定的副本规模通常 23 个专门负责协调避免任务负载波动影响调度稳定性Worker 可以独立、快速地横向扩缩容扩容即可增加可用 slot缩容不影响 Master 选举在 Kubernetes 环境中Master 与 Worker 的升级、滚动更新、资源配额都可以分别管理。仓库的官方 Helm Chartdeployment-seatunnel-master.yaml也验证了这种部署思路默认命令为/bin/sh -c /opt/seatunnel/bin/seatunnel-cluster.sh -r masterMaster 暴露 5801Hazelcast 端口与 8080REST API 端口两个容器端口并以 ConfigMap 方式挂载全部配置文件到/opt/seatunnel/config/。推荐拓扑组件推荐工作负载最小副本数生产建议MasterStatefulSet1至少 2 个用于 HA 和 IMap 备份WorkerStatefulSet1按任务并行度和 slot 规划扩缩容Hazelcast discoveryHeadless Service1publishNotReadyAddresses: trueREST APIClusterIP Service1可按需通过 Ingress 或 LoadBalancer 暴露:::tip 提示 单 Master 可以启动集群但不具备高可用能力。若backup-count: 1建议至少部署 2 个 Master否则 Master 宕机后集群无法依赖备份副本恢复 IMap 状态。 :::Master 和 Worker 都应使用StatefulSet部署而非 Deployment原因有二StatefulSet 为每个 Pod 提供稳定的网络标识如seatunnel-master-0配合 Headless Service 可被 Hazelcast 成员发现机制稳定识别StatefulSet 的滚动更新、删除策略是逐个 Pod 进行的可以避免滚动更新、节点驱逐或重新调度时同时终止过多节点从而防止选主抖动或可用 slot 突然不足。相比之下Deployment 可能同时替换多个副本对集群协调与任务运行造成冲击。创建 ConfigMap按角色拆分配置建议按角色拆分 ConfigMap避免单个 YAML 过长也便于分别更新 Master、Worker 和客户端配置。生产环境中的访问密钥、密码和 token 应通过 Secret 管理不应直接写入 ConfigMap。本节给出的四份 ConfigMap 分别对应仓库中四份本地样例配置的 Kubernetes 化版本本地 config/hazelcast-master.yamlTCP-IP 发现、端口 5801、REST API 开启、config/hazelcast-worker.yaml端口 5802、TCP-IP 发现、config/hazelcast-client.yaml连接localhost:5801与 config/seatunnel.yaml引擎级配置。Kubernetes 场景下将成员发现改为 Kubernetes API / DNS 发现即可。Master Hazelcast 配置apiVersion: v1 kind: ConfigMap metadata: name: seatunnel-master-hazelcast-config data: hazelcast-master.yaml: | hazelcast: cluster-name: seatunnel-cluster network: rest-api: enabled: true endpoint-groups: CLUSTER_WRITE: enabled: true DATA: enabled: true port: auto-increment: false port: 5801 join: kubernetes: enabled: true namespace: default service-name: seatunnel-cluster service-port: 5801 map: engine*: map-store: enabled: true initial-mode: EAGER factory-class-name: org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory properties: type: hdfs namespace: /seatunnel/imap clusterName: seatunnel-cluster storage.type: hdfs fs.defaultFS: hdfs://namenode:8020 properties: hazelcast.invocation.max.retry.count: 20 hazelcast.tcp.join.port.try.count: 30 hazelcast.logging.type: log4j2 hazelcast.operation.generic.thread.count: 50 hazelcast.heartbeat.failuredetector.type: phi-accrual hazelcast.heartbeat.interval.seconds: 2 hazelcast.max.no.heartbeat.seconds: 180 hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10 hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200 hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100配置要点解读map.engine*段为所有引擎 IMap名称以engine开头的 Hazelcast Map启用 MapStore 持久化。工厂类org.apache.seatunnel.engine.server.persistence.FileMapStoreFactory的实现位于 FileMapStoreFactory.java它会为每个 Map 设置businessName并返回FileMapStore实例将 IMap 状态落盘到指定后端示例为 HDFShdfs://namenode:8020的/seatunnel/imap命名空间。这正是Master 宕机后可以依赖备份副本恢复 IMap 状态的底层实现基础。initial-mode: EAGER表示 MapStore 在 Map 初始化时立即加载全部数据配合backup-count保证状态可恢复。心跳相关参数采用phi-accrual故障检测器hazelcast.heartbeat.failuredetector.type: phi-accrual、间隔 2 秒、最大无心跳 180 秒阈值 10、样本数 200、最小标准差 100ms。这套组合对网络抖动更鲁棒适合 Kubernetes 这种可能出现瞬时网络波动的环境。Worker Hazelcast 配置apiVersion: v1 kind: ConfigMap metadata: name: seatunnel-worker-hazelcast-config data: hazelcast-worker.yaml: | hazelcast: cluster-name: seatunnel-cluster network: rest-api: enabled: true endpoint-groups: CLUSTER_WRITE: enabled: true DATA: enabled: true port: auto-increment: false port: 5801 join: kubernetes: enabled: true namespace: default service-name: seatunnel-cluster service-port: 5801 properties: hazelcast.invocation.max.retry.count: 20 hazelcast.tcp.join.port.try.count: 30 hazelcast.logging.type: log4j2 hazelcast.operation.generic.thread.count: 50 hazelcast.heartbeat.failuredetector.type: phi-accrual hazelcast.heartbeat.interval.seconds: 2 hazelcast.max.no.heartbeat.seconds: 180 hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10 hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200 hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100 member-attributes: rule: type: string value: worker对比 Master 配置可以发现两个关键差异没有map.engine*段Worker 不存储 IMap 数据因此无需 MapStore 持久化多了member-attributes通过rule: worker声明该成员是 Worker 角色引擎据此将任务调度到 Worker 节点执行而不会把协调职责分派给它。两种成员发现方式Kubernetes API 与 DNS上述示例使用Hazelcast Kubernetes API 发现join.kubernetes下的namespace、service-name、service-port。这种方式的原理是 Hazelcast 通过调用 Kubernetes API 查询指定 Headless Service 背后的 Pod 列表来发现成员因此需要配套的 RBAC 权限。如果希望使用DNS 发现并避免 Hazelcast 访问 Kubernetes API可以将hazelcast-master.yaml和hazelcast-worker.yaml中的join.kubernetes都替换为join: kubernetes: enabled: true service-dns: seatunnel-cluster.default.svc.cluster.local service-dns-timeout: 10:::info 说明 使用 DNS 发现时下面的 RBAC 章节不是成员发现所必需的。如果跳过 RBAC 清单也需要从两个 StatefulSet 中移除serviceAccountName: seatunnel或单独创建这个 ServiceAccount。 :::Hazelcast Client 配置客户端配置供 SeaTunnel 引擎作为 Hazelcast Client 连接集群使用例如 REST API 提交任务时通过客户端与 Master 通信。它不参与成员发现只需知道集群入口地址apiVersion: v1 kind: ConfigMap metadata: name: seatunnel-client-config data: hazelcast-client.yaml: | hazelcast-client: cluster-name: seatunnel-cluster properties: hazelcast.logging.type: log4j2 connection-strategy: connection-retry: cluster-connect-timeout-millis: 7000 network: cluster-members: # 如果 SeaTunnel 部署在其他命名空间需要将 default 替换为实际命名空间。 - seatunnel-cluster.default.svc.cluster.local:5801与本地样例 config/hazelcast-client.yaml连接localhost:5801不同Kubernetes 场景下cluster-members指向 Headless Service 的完整 DNS 名称seatunnel-cluster.default.svc.cluster.local:5801。cluster-connect-timeout-millis: 7000控制客户端在集群不可达时的重试总超时。SeaTunnel Engine 配置apiVersion: v1 kind: ConfigMap metadata: name: seatunnel-engine-config data: seatunnel.yaml: | seatunnel: engine: backup-count: 1 history-job-expire-minutes: 1440 print-execution-info-interval: 300 classloader-cache-mode: true telemetry: metric: enabled: false logs: scheduled-deletion-enable: true slot-service: dynamic-slot: false slot-num: 8 job-schedule-strategy: WAIT checkpoint: interval: 180000 timeout: 30000 storage: type: hdfs max-retained: 3 plugin-config: storage.type: hdfs namespace: /seatunnel/checkpoint/ fs.defaultFS: hdfs://namenode:8020 http: enable-http: true port: 8080引擎配置要点对照本地 config/seatunnel.yaml 可以看出一致性与差异backup-count: 1IMap 备份副本数。与map.engine*的 MapStore 配合实现 Master HA因此生产环境至少部署 2 个 Master一个主副本 一个备份副本。history-job-expire-minutes: 1440历史作业信息保留时间分钟默认保留 1 天。print-execution-info-interval: 300打印执行信息的间隔秒数本地样例为 60生产可调大以降低日志量。classloader-cache-mode: true启用类加载器缓存提升插件加载效率。slot-service.dynamic-slot: falseslot-num: 8关闭动态 slot固定每个 Worker 提供 8 个 slot。slot 是任务并行度调度的基本单位Worker 的总可用 slot 决定了能承载的任务并行度上限这也是按任务并行度和 slot 规划扩缩容的依据。job-schedule-strategy: WAIT作业调度策略等待足够 slot 后才启动任务。checkpointcheckpoint 间隔 180 秒、超时 30 秒快照存储到 HDFS/seatunnel/checkpoint/最多保留 3 份。http开启 REST API8080 端口供任务提交与状态查询。:::caution 注意 如果使用 S3、OSS、COS、OBS、TOS 等对象存储作为 checkpoint 或 MapStore 后端需要保证每个 Pod 都具备网络访问能力和对应凭据。不要在 ConfigMap 的 YAML 内容中写secretKeyRef需要在部署前渲染最终配置或使用 Hadoop credential provider、云厂商凭据链、挂载凭据文件等底层文件系统支持的方式。 :::为 API 发现创建 RBAChazelcast-master.yaml和hazelcast-worker.yaml默认使用的namespace、service-name和service-port属于 Hazelcast Kubernetes API 发现。在启用 RBAC 的集群中请先创建 ServiceAccount、Role 和 RoleBinding再启动 StatefulSet。如果改用service-dns发现可以跳过本节apiVersion: v1 kind: ServiceAccount metadata: name: seatunnel --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: seatunnel-hazelcast-discovery rules: - apiGroups: [] resources: [pods, services, endpoints] verbs: [get, list, watch] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: seatunnel-hazelcast-discovery subjects: - kind: ServiceAccount name: seatunnel roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: seatunnel-hazelcast-discovery权限说明Hazelcast 的 Kubernetes 发现插件通过get/list/watchPod、Service、Endpoints 资源来动态发现集群成员。使用Role而非ClusterRole意味着权限被限制在default命名空间内与 ConfigMap 中namespace: default的发现配置保持一致若 SeaTunnel 部署在其他命名空间需要同步调整 Role 所在命名空间与 ConfigMap 中的 namespace。创建 ServiceHeadless 发现 角色访问入口seatunnel-cluster是Headless ServiceclusterIP: None用于 Hazelcast 成员发现。Master 和 Worker 都会通过该服务加入同一个集群。apiVersion: v1 kind: Service metadata: name: seatunnel-cluster labels: app: seatunnel-cluster spec: clusterIP: None publishNotReadyAddresses: true ports: - name: hazelcast port: 5801 targetPort: 5801 selector: app: seatunnel --- apiVersion: v1 kind: Service metadata: name: seatunnel-master labels: app: seatunnel-master component: master spec: type: ClusterIP ports: - name: rest-api port: 8080 targetPort: 8080 - name: hazelcast port: 5801 targetPort: 5801 selector: app: seatunnel component: master --- apiVersion: v1 kind: Service metadata: name: seatunnel-worker labels: app: seatunnel-worker component: worker spec: type: ClusterIP ports: - name: rest-api port: 8080 targetPort: 8080 - name: hazelcast port: 5801 targetPort: 5801 selector: app: seatunnel component: worker三个 Service 的职责不同seatunnel-clusterHeadlesspublishNotReadyAddresses: true是关键配置它让尚未就绪例如仍在启动选主阶段的 Pod 也获得 DNS 记录保证 Hazelcast 成员发现能够覆盖所有即将加入集群的节点。它只暴露 5801 端口供成员间通信。seatunnel-masterClusterIP通过 selector 限定component: master提供 8080 REST API 入口可按需再通过 Ingress 或 LoadBalancer 对外暴露。seatunnel-workerClusterIP同样暴露 8080 与 5801。Worker 的 REST API 主要用于查看节点状态也可以作为提交入口实际生产中通常以 Master 的 REST API 为准。注意 StatefulSet 的spec.serviceName必须指向seatunnel-clusterHazelcast 才能通过该 Headless Service 解析到每个 Pod 的稳定 DNS 名称。创建 Master StatefulSet以下 StatefulSet 示例使用 16 GB JVM 堆内存CPU request 设置为 4、limit 设置为 8容器内存 request 设置为 20 GiB、limit 设置为 24 GiB。内存余量用于 Metaspace、直接内存、线程栈和其他本地内存CPU 配额用于任务执行、垃圾回收和引擎协调。对于大规模数据处理场景建议使用 32 GB JVM 堆内存可将 CPU request 和 limit 分别提高到 8 和 16并将内存 request 和 limit 分别提高到 36 GiB 和 40 GiB作为初始配置。请根据 Connector 特性、任务并行度以及实际 CPU、GC 和内存利用率继续调整。apiVersion: apps/v1 kind: StatefulSet metadata: name: seatunnel-master labels: app: seatunnel component: master spec: serviceName: seatunnel-cluster replicas: 2 selector: matchLabels: app: seatunnel component: master template: metadata: labels: app: seatunnel component: master spec: serviceAccountName: seatunnel containers: - name: app image: seatunnel:3.0.0 imagePullPolicy: IfNotPresent command: - /opt/seatunnel/bin/seatunnel-cluster.sh - -r - master - -DJvmOption-Xms16g -Xmx16g env: - name: SEATUNNEL_HOME value: /opt/seatunnel - name: HAZELCAST_CLUSTER_NAME value: seatunnel-cluster ports: - containerPort: 8080 name: rest-api - containerPort: 5801 name: hazelcast resources: requests: cpu: 4 memory: 20Gi limits: cpu: 8 memory: 24Gi volumeMounts: - name: hazelcast-master-config mountPath: /opt/seatunnel/config/hazelcast-master.yaml subPath: hazelcast-master.yaml - name: client-config mountPath: /opt/seatunnel/config/hazelcast-client.yaml subPath: hazelcast-client.yaml - name: engine-config mountPath: /opt/seatunnel/config/seatunnel.yaml subPath: seatunnel.yaml terminationGracePeriodSeconds: 120 volumes: - name: hazelcast-master-config configMap: name: seatunnel-master-hazelcast-config - name: client-config configMap: name: seatunnel-client-config - name: engine-config configMap: name: seatunnel-engine-config关键设计说明command中的-r master对应启动脚本 seatunnel-cluster.sh 的角色解析逻辑-DJvmOption-Xms16g -Xmx16g会被脚本解析并追加到 JVM 启动参数脚本中JvmOption处理逻辑位于 149155 行。环境变量HAZELCAST_CLUSTER_NAMEseatunnel-cluster与 ConfigMap 中的cluster-name保持一致。三个 ConfigMap 通过subPath挂载到/opt/seatunnel/config/下的具体文件名与启动脚本读取配置的路径约定${CONF_DIR}/hazelcast-master.yaml、${CONF_DIR}/seatunnel.yaml一一对应。replicas: 2配合backup-count: 1实现 Master HA。terminationGracePeriodSeconds: 120为优雅停止预留充足时间与下文 preStop 钩子协同工作。创建 Worker StatefulSetapiVersion: apps/v1 kind: StatefulSet metadata: name: seatunnel-worker labels: app: seatunnel component: worker spec: serviceName: seatunnel-cluster replicas: 2 selector: matchLabels: app: seatunnel component: worker template: metadata: labels: app: seatunnel component: worker spec: serviceAccountName: seatunnel containers: - name: app image: seatunnel:3.0.0 imagePullPolicy: IfNotPresent command: - /opt/seatunnel/bin/seatunnel-cluster.sh - -r - worker - -DJvmOption-Xms16g -Xmx16g env: - name: SEATUNNEL_HOME value: /opt/seatunnel - name: HAZELCAST_CLUSTER_NAME value: seatunnel-cluster ports: - containerPort: 8080 name: rest-api - containerPort: 5801 name: hazelcast resources: requests: cpu: 4 memory: 20Gi limits: cpu: 8 memory: 24Gi volumeMounts: - name: hazelcast-worker-config mountPath: /opt/seatunnel/config/hazelcast-worker.yaml subPath: hazelcast-worker.yaml - name: client-config mountPath: /opt/seatunnel/config/hazelcast-client.yaml subPath: hazelcast-client.yaml - name: engine-config mountPath: /opt/seatunnel/config/seatunnel.yaml subPath: seatunnel.yaml terminationGracePeriodSeconds: 120 volumes: - name: hazelcast-worker-config configMap: name: seatunnel-worker-hazelcast-config - name: client-config configMap: name: seatunnel-client-config - name: engine-config configMap: name: seatunnel-engine-configWorker StatefulSet 与 Master 的区别仅在两点-r worker启动参数以及挂载hazelcast-worker.yaml而不是hazelcast-master.yaml。自定义插件不包含在基础 StatefulSet 中。需要额外插件时请参考 插件加载通过自定义镜像、initContainer overlay、PersistentVolume 或对象存储单独管理插件。健康检查和优雅停止Master 和 Worker 都建议添加以下容器片段。startupProbe可以避免启动期误杀preStop会先调用 SeaTunnel 停止脚本再等待SeaTunnelServer进程退出配合terminationGracePeriodSeconds可以降低滚动更新和节点驱逐对运行任务的影响。startupProbe: tcpSocket: port: 5801 periodSeconds: 10 failureThreshold: 30 readinessProbe: tcpSocket: port: 5801 initialDelaySeconds: 31 periodSeconds: 30 timeoutSeconds: 5 failureThreshold: 3 livenessProbe: tcpSocket: port: 5801 initialDelaySeconds: 30 periodSeconds: 30 timeoutSeconds: 5 failureThreshold: 3 lifecycle: preStop: exec: command: - /bin/sh - -c - | /opt/seatunnel/bin/stop-seatunnel-cluster.sh while kill -0 $(ps -ef | grep SeaTunnelServer | grep -v grep | awk {print $2}) 2/dev/null; do sleep 1 done探针与优雅停止的设计意图三种探针都以 5801 端口Hazelcast 成员通信端口为健康依据因为该端口就绪才代表节点已成功加入集群。startupProbe的periodSeconds: 10, failureThreshold: 30意味着最多等待 300 秒避免启动阶段加载插件、恢复 IMap 状态耗时较长时被误判为不健康而杀掉。preStop钩子先执行 stop-seatunnel-cluster.sh该脚本会向org.apache.seatunnel.core.starter.seatunnel.SeaTunnelServer即APP_MAIN进程发送 kill 信号触发优雅停机随后循环检查SeaTunnelServer进程是否退出确保节点在完成状态迁移、任务交接之前不会消失。terminationGracePeriodSeconds: 120与 preStop 中的等待循环形成兜底如果优雅停机超过 120 秒Kubernetes 才会强制终止容器。这套组合可以显著降低滚动更新和节点驱逐对运行任务的影响。应用配置与验证集群:::info 说明 仅在使用 API 发现或 StatefulSet 保留serviceAccountName: seatunnel时应用seatunnel-rbac.yaml。 :::按依赖顺序应用所有清单kubectl apply -f seatunnel-master-hazelcast-config.yaml kubectl apply -f seatunnel-worker-hazelcast-config.yaml kubectl apply -f seatunnel-client-config.yaml kubectl apply -f seatunnel-engine-config.yaml kubectl apply -f seatunnel-rbac.yaml kubectl apply -f seatunnel-services.yaml kubectl apply -f seatunnel-master.yaml kubectl apply -f seatunnel-worker.yaml先应用 ConfigMap 与 RBAC再应用 Service 和 StatefulSet可以避免 Pod 启动时因配置缺失或权限不足而反复重启。检查 Pod 状态kubectl get pods -l appseatunnel当所有 Pod 处于Running且1/1READY 状态时集群即组建完成。两个 Master 会完成 Hazelcast 选主Worker 通过 Headless Service 加入同一集群并注册 slot。访问 REST APIkubectl port-forward svc/seatunnel-master 8080:8080 curl http://127.0.0.1:8080/system-monitoring-information/system-monitoring-information返回集群节点、内存与资源使用信息可用来确认 Master/Worker 是否都已正确加入集群。提交作业请参考 REST API V2。验证集群的另一条路径仓库的 K8s e2e 测试仓库的 Kubernetes 端到端测试seatunnel-statefulset.yaml印证了上述部署方式测试环境同样使用serviceName: seatunnel的 Headless Service 2 副本 StatefulSet容器命令为seatunnel-cluster.sh并暴露 5801 端口用于成员通信。这说明Headless Service StatefulSet 5801 端口是 SeaTunnel 在 Kubernetes 上组建集群的标准模式。扩缩容 WorkerWorker 扩容可以增加可用 slotkubectl scale statefulset seatunnel-worker --replicas4扩容是加计算资源的过程新的 Worker Pod 启动后会通过 Headless Service 自动加入集群并注册 slot随后即可承接新提交的任务或增加并行度因此扩容对运行中的作业是安全的。缩容则需要更加谨慎缩容前应确认被缩容的 Worker 上没有正在运行的关键任务且剩余 Worker 的 slot 能承载当前作业。建议先停止或迁移作业再缩容 Workerkubectl scale statefulset seatunnel-worker --replicas2缩容前的检查清单查看当前作业运行在哪些 Worker 上可通过 REST API 的作业/节点信息确认计算剩余 Worker 的总 slotslot-num × 剩余副本数是否大于等于当前所有作业占用的并行度总和若 slot 不足先通过调低作业并行度或等待作业完成来释放 slot再执行缩容理想情况下在作业低峰期执行缩容并依赖 preStop 钩子 terminationGracePeriodSeconds让被缩容节点优雅退出。生产实践要点总结HA 是硬要求Master 至少 2 副本backup-count: 1时否则单点 Master 宕机后 IMap 状态无法依赖备份恢复Worker 副本数按slot-num × 副本数与任务总并行度匹配来规划。角色配置严格分离Master 配置含map.engine*MapStore 持久化与 REST APIWorker 配置通过member-attributes.rule: worker声明角色两者使用同一个cluster-name与 Headless Service 加入同一集群。发现方式二选一API 发现需要 RBACRole 限定命名空间DNS 发现更轻量service-dnsservice-dns-timeout但两者都要保证serviceAccountName与所选方式匹配。敏感信息走 Secret访问密钥、密码、token 与对象存储凭据严禁写入 ConfigMap对象存储后端需为每个 Pod 提供网络与凭据能力采用 Hadoop credential provider、云厂商凭据链或挂载凭据文件等方式。优雅退出是滚动更新的前提startupProbe/readinessProbe/livenessProbe以 5801 端口为健康依据preStop执行 stop-seatunnel-cluster.sh 并等待SeaTunnelServer退出配合terminationGracePeriodSeconds: 120保护运行中任务。Worker 是弹性的Master 是稳定的扩容 Worker 随时可做缩容前必须确认目标节点无关键任务且剩余 slot 足够先停/迁移作业再缩容。配置好以上清单后即可在 Kubernetes 上获得一个具备 Master HA、Worker 弹性伸缩、状态可恢复IMap checkpoint 持久化到 HDFS的 SeaTunnel 生产集群。赞分享数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载相关推荐SeaTunnel 分离集群模式Separated Cluster ModeKubernetes 生产部署指南SeaTunnel 分离集群模式Separated Cluster ModeKubernetes 生产部署指南 分离集群模式Separated Clust数据集成ETL大数据批处理流处理变更数据捕获SeaTunnel Zeta Engine 分离模式集群部署Master/Worker 角色分离、seatunnel.yaml 配置与高可用实践SeaTunnel Zeta Engine 分离模式集群部署Master/Worker 角色分离、seatunnel.yaml 配置与高可用实践 本文系统讲解数据集成ETL大数据批处理流处理变更数据捕获Apache SeaTunnel Zeta 引擎分离集群部署指南Master / Worker 角色拆分、HA 配置与任务提交实战Apache SeaTunnel Zeta 引擎分离集群部署指南Master / Worker 角色拆分、HA 配置与任务提交实战 导读 本文基于 Apach数据集成ETL大数据批处理流处理变更数据捕获创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/19 17:18:18
ik_llama.cpp 注意力矩阵乘法策略优化解析:从 GQA 分块 GEMM 到 N_t×N_h 点积重排的 CPU 长上下文加速方案
2026/9/19 17:18:18
TiXL Lib.flow.context 上下文变量操作符完全指南:在节点图中传递数据与渲染状态
2026/9/19 17:18:18
Unity移动端CPU发热优化实战:GC、Draw Call与Canvas重建解析
2026/9/19 18:58:28
Textual FAQ 全解析:图片、居中布局、Worker 与 ANSI 颜色等十大高频问题实战指南
2026/9/19 18:58:28
ESP32多芯片适配本质:引脚、时钟与内存三重硬件契约
2026/9/19 18:58:28
Mac 磁盘空间一条命令找回来:免费开源 Mole 清理工具新手指南
2026/9/19 18:58:28
Taro H5 端路由系统解析:从 `@tarojs/router` 看小程序路由规范在 Web 端的落地
2026/9/19 18:58:28
aclnnMoeTokenPermuteV2 算子深度指南:CANN ops-transformer 中 MoE Token Permute 的量化扩展与两段式调用
2026/9/19 18:53:27
OpenTofu 资源实例变更生命周期:从 Provider 协议到计划与应用(Plan/Apply)的完整实现指南
2026/9/19 0:02:13
PixiJS v8 遮罩(Masking)完全指南:AlphaMask、StencilMask、ScissorMask 与 ColorMask
2026/9/19 0:02:13
GLM 5.3 Flash 被 Artificial Analysis 收录:用 TaoToken 复现同一把 Key
2026/9/19 0:02:13
分布式雷达多维度干扰建模与抗干扰算法实现
2026/9/18 16:05:49
拯救者Y7000黑屏故障排查与维修实战指南
2026/9/18 3:56:12
AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
2026/9/18 13:25:13
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化