SeaTunnel 向远程 Zeta 集群提交作业完整指南:Docker / Kubernetes / EKS / Helm 全场景实战

发布时间:2026/9/20 11:30:31

SeaTunnel 向远程 Zeta 集群提交作业完整指南:Docker / Kubernetes / EKS / Helm 全场景实战 数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载导读本文是 SeaTunnel 引擎Zeta远程作业提交的实战手册系统讲解如何将 SeaTunnel 作业从本地机器或 CI/CD 流水线提交到远程Zeta 集群而非仅在本地运行。内容覆盖两种核心提交方式--master客户端参数与 REST API、Docker 单节点与多节点集群、Kubernetes 三种访问方式kubectl port-forward、NodePort、LoadBalancer、ConfigMap 作业配置管理以及 Amazon EKS 上的 Helm 部署。读完本文你将掌握 Zeta 集群的网络端口规划5801 / 8080 / 8090、REST API 提交与监控接口的完整用法以及一套可直接复制的故障排查方法论。1. 前置条件向远程 Zeta 集群提交作业前需要满足以下三项基本条件需求说明SeaTunnel 客户端已安装本地拥有 SeaTunnel 目录可执行bin/seatunnel.sh集群可达提交机器能够访问 REST API 端口默认8080作业配置文件就绪HOCON.conf、JSON 或 SQL 格式的作业配置文件需要特别强调的是这里所说的远程集群必须是已经启动运行的 Zeta 集群。Zeta 引擎支持三种部署形态详见 Zeta 安装部署本地模式Local仅用于测试每个任务启动独立进程、混合集群模式Master 与 Worker 同进程、所有节点均可参与选举和分离集群模式Master 与 Worker 分离Master 只负责作业调度、REST API 与任务提交。其中分离集群模式是官方推荐的生产部署方式因为 Master 不运行同步任务负载更小、稳定性更高即使 Worker 节点宕机也不会导致 IMap 状态数据重新分布详见 分离集群模式部署。本文涉及的远程提交适用于混合集群与分离集群两种模式。2. 从本地机器向远程集群提交2.1--master参数Zeta所有 SeaTunnel Zeta 客户端命令均支持--master参数用于指定集群连接地址bin/seatunnel.sh \ --config job.conf \ --master seatunnel://192.168.1.100:5801Zeta 集群内部默认端口为5801与 REST API 端口8080不同。--master参数用于通过 Hazelcast 成员协议直接连接集群。这一点可以从发行包自带的 config/hazelcast.yaml 中得到印证hazelcast.network.port.port: 5801且auto-increment: false端口不会自动递增避免多节点端口冲突。同时该文件中join.tcp-ip.enabled: true并配置了member-list说明 Zeta 默认使用 TCP-IP 成员发现机制在 Kubernetes 部署时则切换到 Kubernetes 服务发现见 deploy/kubernetes/seatunnel/conf/hazelcast-master.yaml 中的join.kubernetes.enabled: true。Hazelcast 客户端通过 5801 端口加入集群成员组后作业会被提交给当前 Active Master 进行调度。2.2 使用 REST API推荐用于自动化场景对于 CI/CD 流水线和脚本推荐使用 REST API 提交避免在构建机或调度机上维护整套 SeaTunnel 客户端curl -X POST http://192.168.1.100:8080/submit-job \ -H Content-Type: application/json \ -d job.jsonREST API 由 Zeta 引擎内嵌的 Jetty 服务提供。这里有两个容易混淆的默认值来源需要注意详见 REST API v2 参考代码默认值enable-http false、port 8080。也就是说如果你使用精简配置文件或删除了enable-http配置Jetty 默认不会启动REST API 与 Web UI 会一起不可用发行包自带的seatunnel.yaml默认写入了enable-http: true和port: 8080。因此直接使用发行包自带配置启动时REST API 通常监听http://host:8080/。参考 config/seatunnel.yaml 中的实际配置seatunnel: engine: http: enable-http: true port: 8080 enable-dynamic-port: falseREST API 仅在作业运行于 Zeta 引擎时可用作业运行在 Flink 或 Spark 引擎上时需要使用对应引擎自身的工具提交和监控作业。3. Docker单节点提交3.1 启动已启用 REST API 的 Zeta 容器docker run -d --name seatunnel \ -p 8080:8080 \ -e ST_DOCKER_MEMBER_COUNT1 \ apache/seatunnel:versionST_DOCKER_MEMBER_COUNT是 SeaTunnel 官方 Docker 镜像约定成员数量的环境变量单节点为 1多节点集群需在所有节点上设置相同的期望成员数让各容器通过 Hazelcast 发现彼此并组成集群。3.2 从容器外部提交作业容器启动后即可在宿主机上通过 REST API 提交一个FakeSource - Console的冒烟作业curl -X POST http://localhost:8080/submit-job \ -H Content-Type: application/json \ -d { env: { job.name: test, job.mode: BATCH }, source: [{ plugin_name: FakeSource, plugin_output: fake, row.num: 10, schema: { fields: { id: int, name: string } } }], transform: [], sink: [{ plugin_name: Console, plugin_input: [fake] }] }请求成功后会返回类似{jobId: 733584788375666689, jobName: test}的 JSON 响应其中jobId是后续查询作业状态、停止作业的唯一标识。3.3 在容器内执行本地 smoke 测试docker run -d --name seatunnel \ -p 8080:8080 \ -v /path/to/your/jobs:/jobs \ apache/seatunnel:version # 在容器内执行 docker exec seatunnel \ /opt/seatunnel/bin/seatunnel.sh --config /jobs/my-job.conf --master local特别注意该命令仅适用于在容器内做快速本地 smoke 测试。它不是向远程 Zeta 集群提交作业因为--master local会在当前容器进程内本地启动作业作业生命周期与容器进程绑定。真正测试远程提交应该使用第 2 节中的--master seatunnel://host:5801或 REST API 方式。4. Docker多节点集群4.1 Docker Compose 示例用 Docker Compose 快速搭建一个 2 节点 Zeta 集群Master Worker两个容器属于同一个 bridge 网络通过 5801 端口互相发现version: 3.8 services: master: image: apache/seatunnel:version container_name: seatunnel-master ports: - 8080:8080 - 5801:5801 environment: ST_DOCKER_MEMBER_COUNT: 2 networks: - st-net worker: image: apache/seatunnel:version container_name: seatunnel-worker environment: ST_DOCKER_MEMBER_COUNT: 2 networks: - st-net depends_on: - master networks: st-net: driver: bridge启动集群docker-compose up -d向 master 提交作业curl -X POST http://localhost:8080/submit-job \ -H Content-Type: application/json \ -d job.json注意只有master容器对外暴露了 5801 和 8080 两个端口worker容器仅加入内部网络st-net这正是REST API 仅需在 Master 节点上对外暴露这一网络规划原则的体现。4.2 网络端口要求Docker端口协议用途5801TCPHazelcast 集群内部成员通信8080TCPREST API作业提交 / 监控需确保 Docker 网络中所有集群成员之间 5801 端口互通。REST API 仅需在 Master 节点上对外暴露。5. Kubernetes作业提交在 Kubernetes 上部署 SeaTunnel 后部署清单与模板见 deploy/kubernetes/seatunnelMaster 使用 StatefulSet 形态提供稳定的 Pod 名称如seatunnel-master-0有三种方式访问 Master 的 REST API。5.1 使用kubectl port-forward开发 / 临时提交将 Master Pod 的 REST 端口转发到本地# 查找 master pod kubectl get pods -n seatunnel # 转发 REST 端口 kubectl port-forward -n seatunnel \ pod/seatunnel-master-0 8080:8080在另一个终端提交作业curl -X POST http://localhost:8080/submit-job \ -H Content-Type: application/json \ -d job.jsonport-forward方式适合开发调试与临时验证但存在两个天然限制空闲超时会断开连接Pod 重建后需重新执行转发命令。5.2 使用 NodePort 服务测试 / 生产若集群通过NodePort服务暴露 Master# 获取 NodePort kubectl get svc -n seatunnel seatunnel-master-rest # 使用节点 IP 和节点端口提交 curl -X POST http://node-ip:node-port/submit-job \ -H Content-Type: application/json \ -d job.json5.3 使用 LoadBalancer 服务在云厂商托管的 Kubernetes 集群如 EKS、GKE、ACK中更推荐使用 LoadBalancerLB_IP$(kubectl get svc -n seatunnel seatunnel-master-rest \ -o jsonpath{.status.loadBalancer.ingress[0].ip}) curl -X POST http://${LB_IP}:8080/submit-job \ -H Content-Type: application/json \ -d job.json注意AWS 的 LoadBalancer 返回的是hostname而非ip此时应改用{.status.loadBalancer.ingress[0].hostname}取值详见第 7.2 节。6. Kubernetes通过 ConfigMap 管理作业配置在集群内运行作业时建议将作业配置文件以 ConfigMap 形式挂载而非打包到镜像中这样修改作业只需更新 ConfigMap 而无需重建镜像。首先创建 ConfigMap以 CDC 作业为例apiVersion: v1 kind: ConfigMap metadata: name: seatunnel-job-config namespace: seatunnel data: cdc-job.conf: | env { job.name cdc-prod job.mode STREAMING checkpoint.interval 30000 } source { MySQL-CDC { ... } } sink { ... }在 Pod spec 中挂载volumeMounts: - name: job-config mountPath: /opt/seatunnel/jobs volumes: - name: job-config configMap: name: seatunnel-job-config通过kubectl exec提交kubectl exec -n seatunnel seatunnel-master-0 -- \ /opt/seatunnel/bin/seatunnel.sh \ --config /opt/seatunnel/jobs/cdc-job.conf这种方式无需从外部网络访问 REST API直接在 Master Pod 内执行客户端命令即可适用于集群网络受限无公网/无 LoadBalancer的场景。7. Amazon EKS / Helm 部署7.1 Helm 安装SeaTunnel 官方 Helm Chart 支持一键部署 Master 与 Worker 分离架构helm repo add seatunnel https://apache.github.io/seatunnel-helm-charts helm repo update helm install seatunnel seatunnel/seatunnel \ --namespace seatunnel \ --create-namespace \ --set master.replicaCount2 \ --set worker.replicaCount4 \ --set master.service.typeLoadBalancerChart 的默认值位于 deploy/kubernetes/seatunnel/values.yaml其中master.replicas与worker.replicas默认均为2且 Master 与 Worker 均配置了基于hazelcast-port5801的 liveness/readiness 探针image.registry默认为apache/seatunnel可通过image.tag指定具体版本。7.2 EKS 获取 Load Balancer 主机名AWS EKS 的 LoadBalancer 服务通常返回 DNS 主机名而非 IPkubectl get svc -n seatunnel seatunnel-master \ -o jsonpath{.status.loadBalancer.ingress[0].hostname}以该主机名作为 API 端点export ST_HOST$(kubectl get svc -n seatunnel seatunnel-master \ -o jsonpath{.status.loadBalancer.ingress[0].hostname}) curl -X POST http://${ST_HOST}:8080/submit-job \ -H Content-Type: application/json \ -d job.json7.3 通过 Helm values 自定义资源配置生产环境通常需要为 Master 与 Worker 分别规划资源配额、副本数以及引擎级配置可以编写独立的 values 文件# values-prod.yaml master: replicaCount: 2 resources: requests: memory: 4Gi cpu: 2 limits: memory: 8Gi cpu: 4 worker: replicaCount: 8 resources: requests: memory: 8Gi cpu: 4 limits: memory: 16Gi cpu: 8 seatunnel: config: engine: backup-count: 2 queue-type: blockingqueue print-execution-info-interval: 60 http: enable-http: true port: 8080应用配置helm upgrade seatunnel seatunnel/seatunnel \ --namespace seatunnel \ -f values-prod.yaml这里的seatunnel.config.engine段最终会渲染为引擎配置并注入 Pod。其中backup-count: 2控制 Hazelcast IMap 状态数据的备份副本数直接影响集群 HA 能力与 Master 节点数量规划建议取max(1, min(5, N/2))N 为 Master 数量queue-type: blockingqueue选择 Pipeline 内部队列实现print-execution-info-interval: 60周期性打印作业执行信息的时间间隔秒http.enable-http: true/http.port: 8080启用 REST API 与 Web UI对应 config/seatunnel.yaml 中的seatunnel.engine.http配置段。8. 网络与端口要求无论采用哪种部署方式Zeta 集群涉及三个核心端口必须提前规划好防火墙、安全组与 Kubernetes NetworkPolicy端口协议使用方注意事项5801TCPHazelcast 集群成员间通信生产环境不要对外暴露8080TCPREST API生产环境建议通过认证网关暴露8090TCPWeb UI可选仅用于管理看板在 Kubernetes 中建议设置 NetworkPolicy 将 5801 端口限制在 SeaTunnel 命名空间内apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: seatunnel-internal namespace: seatunnel spec: podSelector: matchLabels: app: seatunnel ingress: - from: - namespaceSelector: matchLabels: name: seatunnel ports: - port: 5801补充说明8080 端口上的 REST API 与 Web UI 由同一个内嵌 Jetty 服务提供见 REST API v2 参考只要 Jetty 未启动两者会一起不可用。若在seatunnel.yaml中配置了enable-dynamic-port: true实际监听端口会在port到port port-range之间自动挑选此时应以启动日志SeaTunnel REST service will start on port xxx为准而不是想当然地使用 8080。9. 提交后的监控与作业生命周期管理REST API 进阶作业提交成功只是第一步。在远程集群场景下通常需要通过 REST API 持续监控作业状态与指标。以下是实际运维中最常用的几个接口完整参考见 REST API v29.1 查询作业状态# 运行中作业列表支持分页 curl http://host:8080/running-jobs?page1rows10 # 指定作业详细信息含 SourceReceivedCount / SinkWriteCount 等指标 curl http://host:8080/job-info/jobId # 已结束作业state 取值FINISHED / CANCELED / FAILED / SAVEPOINT_DONE / UNKNOWABLE curl http://host:8080/finished-jobs/FINISHED?page1rows10/job-info/:jobId返回的指标字段包括SourceReceivedCount源端接收行数、SourceReceivedQPS、SinkWriteCountSink 写入尝试行数、SinkCommittedCountcheckpoint 成功后的已提交行数等作业运行中还可返回diagnostics字段其中pipelines[].restoreCount如果持续增长而jobStatus一直是RUNNING说明作业正处于崩溃重启循环需要结合日志排查。9.2 集群与资源概览# 集群概览totalSlot / runningJobs / pendingJobs 等 curl http://host:8080/overview # Worker 资源快照totalSlots / freeSlots / cpuUsage / memUsage curl http://host:8080/resource/workers # Pending 队列诊断排查作业长时间 WAITING / PENDING 的原因 curl http://host:8080/pending-jobs?limit10prettytrue/pending-jobs是排查资源不足的利器当作业提交后长时间处于PENDING响应中的lackingTaskGroups、failureMessage如NoEnoughResourceException: slot not enough和blockingJobIds可以直接指明缺多少 Slot、被哪些作业占用。9.3 停止作业curl -X POST http://host:8080/stop-job \ -H Content-Type: application/json \ -d {jobId: 733584788375666689, isStopWithSavePoint: false, force: false}参数说明参数是否必传说明jobId是作业 IDisStopWithSavePoint否是否通过 savepoint 方式停止保存当前状态便于后续恢复force否是否强制停止忽略isStopWithSavePoint仅应在异常场景使用因为可能导致检查点数据不完整9.4 上传配置文件提交除 JSON 请求体外REST API 还支持直接上传.confHOCON、.sql、.json文件curl --location http://127.0.0.1:8080/submit-job/upload \ --form config_file/temp/fake_to_console.conf上传大小受seatunnel.engine.http.upload-max-file-size-mb默认 10 MB与upload-max-request-size-mb默认 10 MB限制超出会在解析配置之前被拒绝。注意REST API 不支持 dry-run仅 CLI 提供/submit-job还支持format参数json/hocon/sql默认json以及基于restoreMode/restoreSourceJobId/isStartWithSavePoint的作业恢复能力。10. 故障排查远程提交场景中问题往往出在网络不通、端口未开或资源不足三类。下表总结了常见现象、可能原因与修复方法现象可能原因修复方法8080 端口Connection refusedREST API 未启用或端口错误设置enable-http: true检查port配置Worker 无法加入集群防火墙阻断 5801 端口开放所有集群节点间 TCP 5801kubectl port-forward断开空闲超时或 Pod 重启重新执行 port-forward考虑改用 NodePort作业已提交但状态始终为WAITING无可用 Worker 槽位扩容 Worker 副本数或检查资源配额EKS LoadBalancer 主机名无法解析DNS 传播延迟等待 1–2 分钟用nslookup验证Helm 安装卡在pending-install上次安装失败残留执行helm rollback或helm uninstall后重试补充两个容易被忽略的排查点8080 打不开时先确认 Jetty 是否真的启动seatunnel.engine.http.enable-http或enable-https才是 REST API / Web UI 的开关仅配置hazelcast.yaml中的network.rest-api.enabled不能替代 Jetty 开关详见 REST API v2作业状态WAITING/PENDING时用/pending-jobs拿诊断信息响应中的failureMessage会直接告诉你是否NoEnoughResourceException以及具体缺哪些 TaskGroup 的 Slot。参考REST API v2 完整参考Zeta 引擎安装部署分离集群模式部署SeaTunnel 引擎配置文件示例Hazelcast 集群配置文件示例Kubernetes Helm Chart 默认值Kubernetes 部署 Master Hazelcast 配置赞分享数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载相关推荐向远程 Zeta 集群提交 SeaTunnel 作业从 Docker 单机到 Kubernetes/EKS 的完整实战指南向远程 Zeta 集群提交 SeaTunnel 作业从 Docker 单机到 Kubernetes/EKS 的完整实战指南 本文面向需要将 SeaTunnel数据集成ETL大数据批处理流处理变更数据捕获SeaTunnel Zeta 引擎 RESTful API V2 完全指南监控、作业提交与集群运维SeaTunnel Zeta 引擎 RESTful API V2 完全指南监控、作业提交与集群运维 SeaTunnelZeta 引擎内置了一套基于 HTT数据集成ETL大数据批处理流处理变更数据捕获SeaTunnel 集群 Helm 部署实战从 Chart 安装到任务提交完整指南SeaTunnel 集群 Helm 部署实战从 Chart 安装到任务提交完整指南 SeaTunnelApache SeaTunnel是一个多模态、高性能数据集成ETL大数据批处理流处理变更数据捕获创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/20 11:30:31

Python自动回帖机器人源码解析:模拟登录、爬虫与合规实践

简介:面向有Python基础、想学习API接口调用与自动化脚本的开发者,这份资源是一套豆瓣自动回帖机器人完整源码。项目绕开网页版验证码,通过豆瓣API实现小组自动回复,支持多组回帖、定时回复及休息时间,并内置IP代理池自…

2026/9/20 11:30:31

FineReport替代迁移与校验实战:从选型到数据一致性验证

帆软的报表体系在政企、金融、制造这些行业蹲了十几年,很多公司从Excel手工台账时代就是靠它撑起月度经营分析会的。如今到了2026年,一批老用户开始不得不面对一个灵魂拷问:FineReport的授权模式、技术栈和信创适配,到底还能不能跟…

2026/9/20 11:30:31

rrweb 录制数据转视频实战:rrvideo CLI 安装、配置与实现原理

前端可观测性开发工具 【免费下载链接】rrweb record and replay the web 项目地址: https://gitcode.com/gh_mirrors/rr/rrweb 点击查看 免费下载 rrvideo 是 rrweb 官方提供的命令行工具,负责把 rrweb 录制生成的 JSON 会话数据(session e…

2026/9/20 12:40:39

windows控制台cmd乱码解决方案

我们在cmd中执行命令的时候,有时候会出现中文乱码问题,我们可以使用chcp命令解决乱码在控制台输入chcp命令可以查看当前代码页的编码是963(简体中文 GBK编码)控制台中输入chcp 65001并回车将代码页编码改为 UTF-8,这样…

2026/9/20 12:40:39

advmemtest:免费图形化内存测试工具,不限轮数定位颗粒错误

搞内存测试这件事,说起来多少有点“平时没人关心,坏了才想起补课”的意思。无论是新装机的稳定性验证,还是老机器蓝屏、死机、软件闪退,排查到最后十有八九都把矛头指向内存。但市面上的内存测试工具,要么是命令行老古…

2026/9/20 12:40:39

Atlas 300V 24G部署YOLOv5全流程:从推理卡认知到模型转换与调优

接到一块 Atlas 300V 24G 的时候,我干的第一件事不是装驱动,而是先回答自己一个很基础的问题:它到底算不算“运算加速卡”?关于 Atlas 300V 24G 的定位,网上说法很乱,等我把 YOLOv5 在这张卡上完整部署跑通…

2026/9/20 12:40:39

无效对话过滤与强信号判定技术解析

1. 无效对话过滤首先,我们需要检查文本是否包含任何阻断项,如恶意攻击或纯垃圾/零互动。在提供的文本中,没有发现针对聊天对象的恶意攻击或纯垃圾/零互动的情况。因此,我们可以继续进行分析。2. 强信号判定接下来,我们…

2026/9/20 12:40:39

docker 安装 Minio

数据迁移(离线迁移)tmux new -s sync_miniorsync -av --partial -e ‘ssh -p 目标端口’ /mnt/vdb1/minio root目标ip:/目标路径查看进度:tmux a -t sync_jianguan查看列表:tmux ls验证是否传输完毕(看文件数是否一致&…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码