【问题标题】:Flink exactly once semantics and data lossFlink 恰好一次语义和数据丢失
【发布时间】:2021-04-05 23:02:55
【问题描述】:

我们有一个 Flink 设置,Kafka 生产者目前使用 at-least-once 语义。我们正在考虑切换到关于 Kafka 生产者的 exactly-once 语义,因为这会给我们带来好处。不过考虑到文档,这似乎会增加我们目前没有的非常可能的数据丢失风险。如果由于 Flink 无法恢复或 Kafka 代理宕机而导致长时间停机,则 Kafka 事务可能会过期并且数据将丢失。

如果 Flink 应用程序崩溃和完成重启之间的时间 > 大于 Kafka 的事务超时时间,则会出现数据丢失(Kafka 会自动中止超过超时时间的事务)。

这似乎是一种全新的风险,在至少一次语义中不存在并且无法缓解。无论设置了多大的事务超时,都可能存在实际情况。在我看来,最好的方法是设置非常短的检查点间隔,因为它会导致事务关闭但仍然是非常大的事务超时(以小时为单位),以便尝试减少数据丢失的机会。我的理解正确吗?

【问题讨论】:

    标签: apache-kafka apache-flink exactly-once


    【解决方案1】:

    你的理解是正确的。

    FWIW:这仅适用于计划外停机。当您升级您的应用程序时,或者当您想要将其关闭较长时间时,您应该始终使用“停止”命令 [1],该命令将在关闭时提交所有外部事务。

    [1]https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/cli.html#stopping-a-job-gracefully-creating-a-final-savepoint

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2020-10-04
      • 1970-01-01
      • 2010-09-29
      • 2012-11-14
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多