开发者社区 问答 正文

Flink 从checkpoint恢复时,部分状态没有正确恢复

Hi Flink 社区: 我们的Flink版本是1.9.2,用的是blink planer,我们今天遇到一个问题,目前没有定位到原因,现象如下: 手动重启任务时,指定了从一个固定的checkpoint恢复时,有一定的概率,一部分状态数据无法正常恢复,启动后Flink任务本身可以正常运行,且日志中没有明显的报错信息。 具体现象是:type=realshow的数据没有从状态恢复,也就是从0开始累加,而type=show和type=click的数据是正常从状态恢复的。

SQL大致如下: createview view1 as select event_id, act_time, device_id from table1 where getStringFromJson(act_argv, 'ispin', '') <>'1' and event_id in ('article_newest_list_show','article_newest_list_sight_show', 'article_list_item_click', 'article_auto_video_play_click');

--天的数据 insertinto table2 select platform, type, time, count(1) as pv, hll_uv(device_id) as uv from (select'03'as platform, trim(casewhen event_id ='article_newest_list_show'then'show' when event_id ='article_newest_list_sight_show'then'realshow' when event_id ='article_list_item_click'then'click'else''end) astype, date_parse(act_time, 'yyyy-MM-dd HH:mm:ss', 'yyyyMMdd') as time, device_id from view1 where event_id in ('article_newest_list_show','article_newest_list_sight_show', 'article_list_item_click') unionall select'03'as platform, 'click_total'astype, date_parse(act_time, 'yyyy-MM-dd HH:mm:ss', 'yyyyMMdd') as time, device_id from view1 where event_id in ('article_list_item_click', 'article_auto_video_play_click'))a groupby platform, type, time;

期待大家的帮助与回复,希望能给些问题排查的思路!*来自志愿者整理的flink邮件归档

展开
收起
塔塔塔塔塔塔 2021-12-02 15:19:23 875 分享 版权
阿里云 AI 助理回答

面对您描述的Flink任务在特定条件下恢复时部分状态数据未能正常加载的问题,这里有几个可能的排查方向和建议:

  1. Checkpoint一致性检查

    • 首先确认指定用于恢复的checkpoint是否完整且有效。可以通过Flink的Web UI检查该checkpoint的状态,确保它没有被标记为“in progress”或“failed”。同时,查看是否有与之相关的异常日志。
  2. 状态后端检查

    • 确认使用的状态后端(如RocksDB State Backend)配置是否正确,包括但不限于内存大小、磁盘空间限制等。不恰当的配置可能导致数据恢复时出现问题。
    • 检查状态后端是否有任何已知问题或限制,特别是在Flink 1.9.2版本中,是否有针对特定类型状态处理的bug。
  3. SQL逻辑分析

    • 根据您的SQL逻辑,type=realshow的数据是从特定事件(article_newest_list_sight_show)转换而来。考虑检查这部分数据在生成checkpoint时是否存在特殊字符、空值或其他可能导致数据处理异常的情况。
    • 分析SQL中的函数调用,比如getStringFromJsonhll_uv,这些自定义或复杂函数是否有可能在某些情况下返回意料之外的结果,影响到状态的存储或恢复。
  4. 并行度变化

    • 如果重启任务时调整了并行度,这可能会影响状态分配和恢复。确保并行度保持一致,或者理解并正确处理并行度变化对状态恢复的影响。
  5. 日志深入分析

    • 尽管日志中没有明显的错误信息,但还是建议仔细审查所有相关组件的日志,包括TaskManager、JobManager以及状态后端的日志,寻找细微的线索。有时候,低级别的日志会包含关于状态恢复过程的有用信息。
  6. 测试与隔离

    • 尝试在一个隔离的环境中复现问题,使用相同的数据集和配置,但将Flink升级到一个较新的稳定版本,看问题是否依然存在。新版本可能已经修复了潜在的bug。
    • 对SQL进行单元测试,特别是针对有问题的数据流,尝试单独执行这部分逻辑,观察其状态恢复行为。
  7. 社区与技术支持

    • 考虑在Flink的官方社区论坛、GitHub issue页面或Stack Overflow上详细描述问题,并附上尽可能多的诊断信息,寻求更广泛的帮助。

希望上述建议能帮助您定位并解决遇到的问题。如果问题依旧,进一步的技术支持和社区资源将是重要的下一步。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答