Apache Beam KDA应用默认开启checkpoint却不生成检查点的问题咨询
结论
你所使用的Beam + Flink版本与Amazon KDA的配置传递逻辑存在兼容问题,确实需要显式传入checkpoint相关配置值才能正常开启checkpoint功能,不属于平台或代码配置错误。
根因说明
- Amazon KDA控制台配置的DEFAULT checkpoint规则是平台层面的配置,而你使用的
beam-runners-flink-1.11:2.31.0不会自动读取KDA注入的平台级配置,只会识别Pipeline运行时显式传入的参数、或代码中硬编码的配置。 - 你遇到的报错是Beam无界数据源的前置校验逻辑触发的:KinesisIO属于无界数据源,Beam在提交任务前会读取自身的配置项判断checkpoint是否开启,你仅在KDA控制台开启checkpoint但未将配置同步给Beam Pipeline时,Beam层面认为checkpoint处于关闭状态,就会抛出对应错误。
- 当你显式传入
CheckpointInterval参数时,Beam会自动将checkpoint设置为开启状态,参数会覆盖KDA的默认配置,校验逻辑通过后检查点即可正常生成。
可选解决方案
- 方案1:继续通过运行时参数传入配置,除checkpoint间隔外,还可按需传入
execution.checkpointing.min-pause、execution.checkpointing.mode等参数,运行时参数的优先级最高,会覆盖KDA的默认配置和代码中的硬编码配置。 - 方案2:在代码中硬编码checkpoint配置,示例如下:
PipelineOptions options = PipelineOptionsFactory.create(); FlinkPipelineOptions flinkOpts = options.as(FlinkPipelineOptions.class); // 显式开启checkpoint并设置对应参数 flinkOpts.setCheckpointingInterval(60000); flinkOpts.setMinPauseBetweenCheckpoints(5000);
如果后续将Beam版本升级到2.35.0及以上,KDA已经针对更高版本的Flink Runner做了配置自动注入适配,就无需再显式传入这些参数。
内容的提问来源于stack exchange,提问作者Gayan Weerakutti
相关产品推荐
相关产品推荐

