flink精确一次消息处理

yvt65v4c  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(521)

我已经设置了一个Flink1.2独立集群,其中有2个JobManager和3个TaskManager,我正在使用jmeter通过生成kafka消息/事件来进行负载测试,然后对这些消息/事件进行处理。处理作业在taskmanager上运行,通常需要大约15k个事件/秒。
作业已经设置了一次检查点,并且正在将状态和检查点持久化到amazons3。如果关闭运行该作业的taskmanager,则需要一点时间(几秒钟),然后在另一个taskmanager上恢复该作业。作业主要记录连续整数(例如从0到1200000)的事件ID。
当我检查taskmanager上的输出时,我关闭了最后一个计数,例如500000,然后当我检查另一个taskmanager上恢复的作业的输出时,它以~400000开始。这意味着约10万个重复事件。这个数字取决于测试的速度,可以高也可以低。
不确定是否遗漏了某些内容,但我希望在不同的taskmanager上恢复后,作业将显示下一个连续的数字(如500001)。
有人知道为什么会发生这种情况吗/我必须配置额外的设置才能准确地获得一次?

lyr7nygr

lyr7nygr1#

你只看到了一次预期的行为。flink通过检查点和故障情况下的重放来实现容错。保证不是每个事件都会被精确地发送到管道中一次,而是每个事件都会精确地影响管道的状态一次。
检查点在整个集群中创建一致的快照。在恢复期间,将恢复操作员状态,并从最近的检查点重放源。
要获得更全面的解释,请参阅data artisans的博客文章:使用ApacheFlink进行高吞吐量、低延迟和一次流处理™, 或者Flink医生。

相关问题