【DLI】Flink作业重启后,如何保证不丢失数据?

举报
数据湖爱好者 发表于 2021/05/27 09:58:38 2021/05/27
【摘要】 DLI Flink提供了完整可靠的Checkpoint/Savepoint机制,您可以利用该机制,保证在手动重启或者作业异常重启场景下,不丢失数据。为了避免系统故障导致作业异常自动重启后,丢失数据:对于Flink SQL作业,您可以勾选“开启Checkpoint”,并合理配置Checkpoint间隔(权衡执行Checkpoint对业务性能的影响以及异常恢复的时长),同时勾选“异常自动重启”,...

DLI Flink提供了完整可靠的Checkpoint/Savepoint机制,您可以利用该机制,保证在手动重启或者作业异常重启场景下,不丢失数据。

  • 为了避免系统故障导致作业异常自动重启后,丢失数据:
    • 对于Flink SQL作业,您可以勾选“开启Checkpoint”,并合理配置Checkpoint间隔(权衡执行Checkpoint对业务性能的影响以及异常恢复的时长),同时勾选“异常自动重启”,并勾选“从Checkpoint恢复”。配置后,作业异常重启,会从最新成功的Checkpoint文件恢复内部状态和消费位点,保证数据不丢失及聚合算子等内部状态的精确一致语义。同时,为了保证数据不重复,建议使用带主键数据库或者文件系统作为目标数据源,否则下游处理业务需要加上去重逻辑(最新成功Checkpoint记录位点到异常时间段内的数据会重复消费)。
      图1 Flink作业配置参数
    • 对于Flink Jar作业,您需要参考《Flink 自定义作业如何配置checkpoint保存到OBS》,在代码中开启Checkpoint,同时如果有自定义的状态需要保存,您还需要实现ListCheckpointed接口,并为每个算子设置唯一ID。然后在作业配置中,勾选“从Checkpoint恢复”,并准确配置Checkpoint路径。
      图2 开启Checkpoint
      说明:

      Flink Checkpoint机制可以保证Flink平台可感知内部状态的精确一致,但对于自定义Source/Sink或者有状态算子,需要合理实现ListCheckpointed接口,来保证业务数据需要的可靠性。

  • 为了避免因业务修改等需要,手动重启作业后,不丢失数据:
    • 对于无内部状态的作业,您可以配置kafka数据源的启动时间或者消费位点到作业停止之前。
    • 对于有内部状态的作业,您可以在停止作业时,勾选“触发保存点”。成功后,再次启动作业时,开启“恢复保存点”,作业将从选择的savepoint文件中恢复消费位点及状态。同时,由于Flink Checkpoint和Savepoint生成机制及格式一致,因而,也可以通过Flink作业列表“操作”列中的“更多”>“导入保存点”,导入OBS中最新成功的Checkpoint,并从中恢复。
      图3 停止作业
      图4 恢复保存点
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。