Flink CDC 中streampark提交的任务总是会执行两遍,怎么办?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用 StreamPark 提交 Flink CDC 任务时,如果发现任务总是执行两遍,可能是由于以下原因导致的。以下是详细的分析和解决方法:
StreamPark 是一个用于管理 Flink 任务的平台,它可能会在任务提交过程中触发重复的操作。例如: - 任务重复提交:StreamPark 可能会因为配置问题或用户操作不当,导致同一个任务被提交两次。 - 任务重启策略:Flink 默认的重启策略可能导致任务在失败后重新启动,从而看起来像是执行了两遍。
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 2
restart-strategy.fixed-delay.delay: 10s
这样可以确保任务在失败两次后彻底退出,而不是持续重启。
Flink CDC 在某些情况下可能会产生重复的数据变更事件(例如 at-least-once
语义下的故障恢复)。这可能导致下游任务处理了重复的数据,从而看起来像是任务执行了两遍。
exactly-once
。如果无法保证 exactly-once
,需要对重复数据进行去重处理。table.exec.source.cdc-events-duplicate: true
同时,在源表上定义主键(PRIMARY KEY
),Flink 会生成一个额外的有状态算子(ChangelogNormalize
),利用主键对变更事件进行去重并生成规范化的变更日志流。
StreamPark 和 Flink 的版本可能存在兼容性问题,导致任务提交或执行过程中出现异常行为。
如果任务在运行过程中触发了 Checkpoint,并且 Checkpoint 失败或超时,可能会导致任务重新启动,从而看起来像是执行了两遍。
execution.checkpointing.interval: 10min
execution.checkpointing.tolerable-failed-checkpoints: 100
如果任务的并行度设置过高,或者资源分配不足,可能会导致任务在运行过程中出现异常行为。
通过以上步骤,您可以逐步排查并解决 Flink CDC 任务在 StreamPark 中执行两遍的问题。重点在于: 1. 检查任务提交逻辑,避免重复提交。 2. 优化 Flink CDC 的去重机制,确保数据一致性。 3. 调整 Checkpoint 和重启策略,避免任务异常重启。 4. 确认版本兼容性和资源配置,确保任务稳定运行。
如果问题仍然存在,建议联系阿里云技术支持团队,提供详细的日志和配置信息以便进一步分析。