You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Flink特定场景下数据丢失问题的问询

Flink异步Sink场景下的数据丢失风险分析

配置背景

  • 采用Checkpoint实现容错
  • 数据源:Kafka
  • 数据输出端:NoSQL数据库

问题场景

当使用异步Sink降低延迟时,若数据库请求消息未正确插入,但Checkpoint已完成,是否会因Sink的异步特性导致Flink未追踪消息状态而发生数据丢失?


结论与分析

这种场景会存在数据丢失的风险,核心逻辑在于异步Sink的请求处理时机和Checkpoint快照机制的匹配问题:

  1. Checkpoint的默认快照逻辑
    Flink触发Checkpoint时,会向所有算子传递快照信号。对于普通异步Sink来说,默认逻辑是只要把写入请求发送给数据库,就标记该数据已处理,并向Checkpoint coordinator确认该数据已纳入快照,并不会等待数据库返回写入成功的结果。

  2. 异常场景的直接后果
    如果Checkpoint完成后,已经发送的数据库写入请求失败(比如网络中断、数据库节点故障),此时Checkpoint的快照里已经记录了这条数据“已处理”的状态。当Flink集群重启并从该Checkpoint恢复时,会认为这条数据已经处理完成,不会重新从Kafka消费,而数据库中也没有成功写入这条数据,最终导致数据丢失。

  3. 规避方案
    要避免这种问题,必须使用支持Checkpoint对齐的异步Sink实现:

  • 自定义异步Sink时,需在Checkpoint触发阶段,等待所有已发送但未完成的异步写入请求执行完毕,确认结果后再向Checkpoint coordinator提交快照
  • 基于Flink官方的AsyncSinkFunction实现时,要确保重写的逻辑中,将异步请求的成功回调与Checkpoint的状态确认绑定,只有写入成功的数据才会被纳入Checkpoint快照

内容的提问来源于stack exchange,提问作者sclee1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:32:38