作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Apache Flink 通过从检查点恢复作业来保证在失败和恢复时仅处理一次,检查点是分布式数据流和运算符(operator)状态的一致快照(分布式快照的 Chandy-Lamport 算法) . 这保证在故障转移时恰好一次。
在集群正常运行的情况下,Flink如何保证exactly once processing,比如给定一个Flink source,从外部source(比如Kafka)读取,Flink如何保证事件从source读取一次?事件源和 Flink 源之间是否存在任何类型的应用程序级别确认?另外,Flink如何保证事件从上游算子到下游算子只传播一次呢?这是否也需要对接收到的事件进行任何类型的确认?
最佳答案
Flink 不保证每个事件都从源中读取一次。相反,它保证每个事件只影响托管状态一次。
检查点包括源偏移量,并且在检查点恢复期间,源会被倒回并且一些事件可能会被重播。这很好,因为检查点包括整个作业的状态,这些状态是通过读取所有内容直到存储在检查点中的偏移量而产生的,并且没有超出这些偏移量的内容。
因此 Flink 的 exactly once 保证需要可重放的源。 Exactly once 运营商之间的消息传递依赖于 tcp。
要保证接收器不会收到重复的结果,还需要事务性接收器。 Flink 将事务提交作为检查点的一部分。
关于apache-kafka - Apache Flink 中端到端的 Exactly-once 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64135631/
我是一名优秀的程序员,十分优秀!