开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink如果我配置了最大连续失败数不为 1 那么如果我 ck 失败了 我这批数据会丢失吗?

Flink中kafka 的精准一次 sink 如果我配置了最大连续失败数不为 1 那么如果我 ck 失败了 我这批数据会丢失吗?

展开
收起
真的很搞笑 2024-01-09 12:26:30 70 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    如果你配置了最大连续失败数不为1,那么在Flink中Kafka的精准一次sink中,如果ck失败了,这批数据不会丢失。因为最大连续失败数表示允许的最大连续失败次数,超过这个次数后,Flink会将这批数据进行重试。所以,只要重试次数没有达到最大连续失败数,这批数据就不会丢失。

    2024-01-09 14:27:42
    赞同 展开评论 打赏
  • 在 Apache Flink 中,如果配置了 Kafka sink 的最大连续失败次数(max.retries 或 max-concurrent-sink-failures)不为 1,意味着当sink 连续失败达到该配置值之前,Flink 将尝试重新提交并处理数据。每次重试时,Flink 都会依赖其 checkpoint 和状态管理机制来确保至少一次或精准一次的语义。

    对于 checkpointing 与 Kafka sink 结合使用的情况:

    • 至少一次语义:即使 sink 失败并进行了重试,由于 checkpoint 的存在,Flink 至少能保证每个记录会被成功写入到 Kafka 一次,但可能由于重试导致数据重复。

    • 精准一次语义:若要实现精准一次(exactly-once),通常需要配合两阶段提交(two-phase commit protocol)。在 Flink 中,这涉及到和 Kafka transactional producer 结合使用,并且要求整个任务的故障恢复流程能够正确地协调检查点和事务边界。

    当你配置了非严格的最大连续失败数(即大于1),在出现 Checkpoint (CK) 失败的情况下,Flink 作业会根据设定的策略进行重试,只要不超过最大连续失败次数限制,并且能够在后续重试中成功完成checkpoint,则不会丢失数据。

    然而,如果所有重试均失败,并且达到了最大连续失败次数,则这批数据可能会丢失(取决于你是否启用其他的备份机制,如 side output 或死信队列等)。此外,在精准一次语义下,即便没有达到最大连续失败次数,如果因为某些原因无法正常完成事务提交,也可能导致数据最终未被确认写入Kafka。

    2024-01-09 13:59:25
    赞同 1 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载