首页 > 解决方案 > Apache Flink 容错

问题描述

Apache Flink 提供了一种容错机制来持续恢复数据流应用程序的状态。该机制确保即使存在故障,程序的状态最终也会将数据流中的每条记录准确地反映一次。

我需要了解以下链接中的答案: Flink exact-once message processing

这是否意味着 Flink Sink 会对 Cassandra 等外部系统产生重复事件?

例如:

1 - 我有以下流程: source -> flatMap with state -> sink 和配置的快照间隔为 20 秒。

如果任务管理器在两个快照之间(上一个快照 10 秒后和下一个快照前 10 秒)关闭(Killed)会发生什么。

我所知道的是 Flink 将从最后一个快照重新启动作业。

在这种情况下,Sink 将重新处理在上次快照和停机时间之间已经处理的所有记录?

标签: apache-flinkflink-streaming

解决方案


在您描述的场景中,Flink 接收器确实会重新处理自上次快照以来之前发送给它的记录。

但这并不一定意味着连接到接收器的外部数据存储(例如,数据库、文件系统或消息队列)最终将持久保存这些副本。Flink 可以提供我们有时称为“exactly-once end-to-end”的保证,如果 sink 支持事务,或者数据是以幂等方式写入的。

Flink 的 Kafka 生产者和 StreamingFileSink 是接收器的示例,它们可以利用事务来避免产生重复(或不一致)的结果。

Cassandra 的情况稍微复杂一些——请参阅文档——如果您使用幂等查询,Flink 只能提供恰好一次的语义。


推荐阅读