0

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

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

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

4

1 回答 1

2

你的理解是正确的。

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-12-30T08:23:18.920 回答