提问者:小点点

Flink 恰好一次语义和数据丢失


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

如果 Flink 应用程序崩溃和完成重启之间的时间是

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


共1个答案

匿名用户

你的理解是正确的。

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

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