当前位置: 首页 > 知识库问答 >
问题:

Apache Flink中的端到端精确一次处理

应翰飞
2023-03-14

Apache Flink通过从检查点恢复作业,确保故障和恢复时只进行一次处理,检查点是分布式数据流和操作员状态的一致快照(分布式快照的Chandy Lamport算法)。这保证了故障切换时只需一次。

在正常集群操作的情况下,Flink如何保证只进行一次处理,例如给定一个从外部源读取的Flink源(例如Kafka),Flink如何保证从源读取一次事件?事件源和Flink源之间是否有任何类型的应用程序级别的缓存?此外,Flink如何保证事件从上游运营商到下游运营商只发布一次?这是否也需要对接收到的事件进行任何类型的打包?

共有1个答案

祁均
2023-03-14

Flink不保证每个事件都从源中读取一次。相反,它保证每个事件只影响一次托管状态。

检查点包括源偏移量,在检查点还原期间,源会被重绕,一些事件可能会被重播。这很好,因为检查点包括整个作业的状态,该状态是读取检查点中存储的偏移量之前的所有内容所产生的,而不包括这些偏移量之外的任何内容。

因此,Flink的一次性担保需要可重复使用的来源。操作员之间的消息传递依赖于tcp。

确保接收器不会收到重复的结果还需要事务接收器。Flink提交事务作为检查点的一部分。

 类似资料:
  • 我已经设置了一个Flink 1.2独立集群,其中包含2个JobManager和3个TaskManager,我正在使用JMeter通过生成Kafka消息/事件对其进行负载测试,然后处理这些消息/事件。处理作业在TaskManager上运行,通常需要大约15K个事件/秒。 作业已设置EXACTLY_ONCE检查点,并将状态和检查点持久化到Amazon S3。如果我关闭运行作业的TaskManager需

  • 一、 我正试图用Kafka信源和信宿测试Flink一次语义: 运行flink应用程序,只需将消息从一个主题传输到另一个主题,并行度=1,检查点间隔20秒 每2秒使用Python脚本生成具有递增整数的消息。 使用read_committed隔离级别的控制台使用者读取输出主题。 手动杀死TaskManager 我希望在输出主题中看到单调递增的整数,而不考虑TaskManager的终止和恢复。 但实际上

  • 我正在寻找Python的第n个根函数/算法,但在发布之前:没有整数根,见鬼 我从哪里至少可以获得一个指南,指导如何编程生成精确的/ 对于(第一个参数是数字,第二个参数是根深度(或其他内容))不返回或的函数。 编辑:所以,你给了我这个解决方案:,当我问这个问题时,我就知道了,但它不适用于,例如,。你不能用有理数来表示,因此给出了不正确的结果

  • 我正在浏览文档,我知道通过启用 幂等性:幂等生成函数对一个主题对一个生成函数只启用一次。基本上,每一条消息发送都有更高的保证,并且在出现错误时不会重复 那么,如果我们已经有幂等性,那么为什么我们需要在Kafka Stream中另一个恰好一次的属性呢?幂等性和恰好一次之间有什么区别 为什么在普通Kafka制作人中不提供一次房产?

  • 我有一个Flink工作,负责将数据写入MongoDB的接收器。接收器是RichSinkFunction的实现。 已启用外部化检查点。间隔为5000 mills,方案为一次。 Flink版本1.3, kafka(源话题)0.9.0 我无法升级到Flink 1.4的。 我没有什么疑问 在调用函数开始时或调用完成时,接收器在哪个时间点确认检查点屏障?表示它在确认障碍之前等待持久(保存在MongoDB中)

  • 我读过许多文章,其中有许多不同的配置来实现一次处理。 下面是我的生产者配置: 以下是我的使用者配置: 我试图跟随,但我遇到了一些问题: 下面是我的生产者代码: 我的消费代码: