apache-flink - Apache Flink 容错
问题描述
Apache Flink 提供了一种容错机制来持续恢复数据流应用程序的状态。该机制确保即使存在故障,程序的状态最终也会将数据流中的每条记录准确地反映一次。
我需要了解以下链接中的答案: Flink exact-once message processing
这是否意味着 Flink Sink 会对 Cassandra 等外部系统产生重复事件?
例如:
1 - 我有以下流程: source -> flatMap with state -> sink 和配置的快照间隔为 20 秒。
如果任务管理器在两个快照之间(上一个快照 10 秒后和下一个快照前 10 秒)关闭(Killed)会发生什么。
我所知道的是 Flink 将从最后一个快照重新启动作业。
在这种情况下,Sink 将重新处理在上次快照和停机时间之间已经处理的所有记录?
解决方案
在您描述的场景中,Flink 接收器确实会重新处理自上次快照以来之前发送给它的记录。
但这并不一定意味着连接到接收器的外部数据存储(例如,数据库、文件系统或消息队列)最终将持久保存这些副本。Flink 可以提供我们有时称为“exactly-once end-to-end”的保证,如果 sink 支持事务,或者数据是以幂等方式写入的。
Flink 的 Kafka 生产者和 StreamingFileSink 是接收器的示例,它们可以利用事务来避免产生重复(或不一致)的结果。
Cassandra 的情况稍微复杂一些——请参阅文档——如果您使用幂等查询,Flink 只能提供恰好一次的语义。
推荐阅读
- javascript - 正则表达式仅匹配字符串中两个相同字符中的第一个
- javascript - D3力模拟和拖动,node.fx/node.fy是什么?
- xml - xsd.exe 不会为 xs:list 标记创建集合(数组或列表)
- java - Java Web Start 应用程序日志记录权限被拒绝
- shell - 使用 shell cmd 重命名 jenkins 中的目录
- javascript - 如何从脚本在 firefox/chrome 中运行 javascript 片段
- javascript - 使用相同的 jQuery 脚本重定向和修改新页面
- angular - Angular / Firebase - 类型“UserCredential”上不存在属性“电子邮件”
- vue.js - Vue-cli 3 - Webpack 4:无法使用 image-webpack-loader 加载 .webp 格式的图像
- python - 在谷歌应用引擎柔性环境中使用 stream_with_context 在烧瓶中加载栏