Apache提供了一种容错机制,用于始终恢复数据流应用程序的状态。该机制确保即使在出现故障时,程序的状态最终也会准确地反映数据流中的每条记录一次。
我需要理解以下链接中的答案:Flink -一次消息处理
这是否意味着Flink Sink会产生重复事件到外部系统,如Cassandra?
例如:
1-我有以下流程:具有状态->接收器的源-> flatMap,以及配置为20秒的快照间隔。
如果任务管理器在两个快照之间(在10秒后形成最后一个快照,而在下一个快照之前10秒)之间下降(死亡),会发生什么情况。
我所知道的是Flink将从上一个快照重新启动作业。
在这种情况下,Sink将重新处理在上一次快照和停机时间之间已经处理的所有记录?
发布于 2020-02-02 16:12:22
在您所描述的场景中,Flink接收器确实会重新处理上次快照后发送给它的记录。
但这并不一定意味着连接到接收器的外部数据存储(例如数据库、文件系统或消息队列)最终会持久化这些重复项。如果接收器支持事务,或者数据是以幂等方式编写的,Flink可以提供我们有时所称的“精确地一次端到端”的保证。
Flink的Kafka生产者和StreamingFileSink是可以利用事务来避免产生重复(或不一致)结果的接收器的例子。
卡桑德拉的情况稍微复杂一些-- 见文件 --而且如果您使用幂等查询,Flink只能提供精确的一次语义。
https://stackoverflow.com/questions/60016537
复制相似问题