本文为您介绍如何在 Pipeline 中配置、使用并发控制、重试机制以及数据回溯操作。
当同一条 Pipeline 在同一时间有多个实例需要运行时(如调度堆积、手动触发与自动调度并行、数据回溯批量生成),需要通过并发控制管理实例的同时执行数量。
在 Pipeline 配置中通过 concurrency 字段设置:
spec: trigger: type: scheduled cronExpression: expression: "0 * * * *" # 每小时 concurrency: 3 # 最多 3 个实例同时运行
配置项 | 说明 |
|---|---|
| 允许同时运行的最大实例数(默认为 1) |
上游就绪检查通过 --> 检查当前任务运行中的实例数是否达到并发数,若达到则继续等待并持续检查,若未达到则通过并发检查
场景 | 推荐并发数 | 说明 |
|---|---|---|
核心 SLA 链路 | 1 | 严格串行,避免资源竞争和数据冲突。 |
一般日常 ETL | 1–3 | 适度并行,平衡效率与资源占用。 |
数据回溯场景 | 3–5 | 提高回溯速度,按实际资源调整。 |
无状态计算 | 5–10 | 无数据依赖冲突时可放大并行。 |
自依赖(dependsOn.self)和 concurrency: 1 都能实现串行执行,但机制不同:
对比维度 | 自依赖 (dependsOn.self) | 并发控制 (concurrency: 1) |
|---|---|---|
控制层级 | 依赖层(DAG 调度前) | 执行层(实例排队) |
上游失败影响 | 当天实例因依赖未满足而阻塞 | 上游失败后当天实例正常出队执行 |
适用场景 | 数据有严格先后依赖(增量处理) | 仅控制资源并发,数据无先后关系 |
队列管理 | 无队列,实例在依赖阶段等待 | 有显式等待队列 |
当 Activity 执行失败时,系统可自动重试。重试在 Activity 级别配置,通过 retryPolicy 字段定义:
activities: - name: extract_orders type: sql engineType: emr_serverless_spark sqlScript: extract_orders.sql retryPolicy: maxRetries: 3 # 最大重试次数 minRetryIntervalSeconds: 60. # 重试间隔(秒) timeoutSeconds: 3600 # 单次执行超时(秒) retryOnTimeout: true # 超时是否触发重试
字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| Integer | 否 | 0 | 最大重试次数。0 表示不重试 |
| Integer | 否 | 60 | 两次重试之间的最小间隔(秒) |
| Integer | 否 | 0 | 单次执行超时时间(秒)。0 表示不限制 |
| Boolean | 否 | false | 超时后是否重试。为 true 时超时也触发重试 |
Activity 执行 → 执行成功 → SUCCEEDED → 执行失败(或超时) → 已重试次数 < maxRetries? → 是 → 等待 minRetryIntervalSeconds → 重新执行(状态标记为 RETRYING) → 否 → 标记为 FAILED → 根据 dependencyConditions 决定下游行为
失败类型 | 推荐策略 | 说明 |
|---|---|---|
网络超时 / 资源不足 | 重试 2–3 次,间隔 60 秒 | 偶发问题通常重试可恢复 |
SQL 语法错误 | 不重试 (maxRetries: 0) | 重试不会修复代码错误 |
上游数据延迟 | 重试 3–5 次,间隔 300 秒 | 等待上游数据就绪 |
外部 API 限流 | 重试 3 次,间隔 120 秒 | 等待限流窗口过去 |
通过 retryPolicy.timeoutSeconds 设置单次执行的超时时间:
retryPolicy: timeoutSeconds: 3600 # 1 小时超时 retryOnTimeout: true # 超时后重试 maxRetries: 2
超时行为:
| 超时后行为 |
|---|---|
| 终止当前执行 → 触发重试(受 maxRetries 限制) |
| 终止当前执行 → 直接标记为 TIMEOUT |
注意
retryPolicy.timeoutSeconds 是强制终止,与告警中的"执行超时"不同。告警的执行超时仅发送通知而不终止任务。
Pipeline 级别没有单独的超时配置。Pipeline 的实际执行时间取决于所有 Activity 的执行时间之和(串行部分)和最长并行路径。
如需控制 Pipeline 整体完成时间,推荐使用告警中的"未按时完成"指标(参见监控规则配置),在预期时间前发出预警。