Flink一次性消息处理

时间:2017-04-16 09:01:45

标签: apache-flink flink-streaming flink-cep

我已经设置了一个Flink 1.2独立群集,其中包含2个JobManagers和3个TaskManagers,我正在使用JMeter通过生成Kafka消息/事件对其进行加载测试,然后对其进行处理。处理作业在TaskManager上运行,通常需要~15K事件/秒 该作业已设置EXACTLY_ONCE检查点,并将状态和检查点持久保存到Amazon S3。 如果我关闭运行作业的TaskManager,它需要几秒钟,然后在另一个TaskManager上恢复作业。该作业主要记录连续整数的事件ID(例如,从0到1200000) 当我检查TaskManager上的输出时,我关闭了最后一次计数,例如500000,然后当我在另一个TaskManager上检查恢复作业的输出时,它以~400000开始。这意味着~100K的重复事件。这个数字取决于测试的速度可以更高或更低 不确定我是否遗漏了一些东西,但我希望作业在恢复不同的TaskManager后显示下一个连续的数字(如500001)。
有谁知道为什么这发生/额外的设置我必须配置,以获得一次?

1 个答案:

答案 0 :(得分:9)

您正在看到完全一次的预期行为。 Flink在故障情况下通过检查点和重放的组合实现容错。保证并不是每个事件都会被准确地发送到管道中一次,而是每个事件都会影响管道的状态一次。

检查点在整个​​群集中创建一致的快照。在恢复期间,将恢复操作员状态,并从最近的检查点重放源。

有关更详尽的说明,请参阅此数据Artisans博客文章:High-throughput, low-latency, and exactly-once stream processing with Apache Flink™the Flink docs