检查点和Flume的障碍物确认

a6b3iqyw  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(346)

我有一个flink的工作,负责将数据写入mongodb。接收器是 RichSinkFunction .
已启用外部化检查点。间隔为5000米,方案正好是一次。
flink 1.3版,
Kafka(源题)0.9.0
我无法升级到 TwoPhaseCommitSink Flink1.4。
我几乎没有怀疑
在调用函数开始时或调用完成时,接收器在哪个时间点确认检查点屏障?意味着它在确认屏障之前等待持久化(保存在mongodb中)响应?
如果提交检查点是由异步线程完成的,那么在作业失败的情况下,flink如何保证只提交一次?如果数据由sink保存到mongodb,但是检查点没有提交呢?我认为重启时会出现重复数据。
当我从flink Jmeter 板取消一个作业时,flink会完成异步检查点线程来完成还是一个硬kill-9调用?

pxyaymoc

pxyaymoc1#

首先,如果源和汇支持这一点,flink只能保证端到端的一致性。如果您使用的是flink的kafka消费者,那么flink可以保证应用程序的内部状态完全一致。为了实现完全的端到端一致性,接收器也需要适当地支持这一点。您应该检查mongodb接收器的实现是否正常工作。
检查点屏障是通过数据传输通道发送常规消息的屏障,即检查点屏障 n 将流分离为进入检查点的记录 n 以及 n + 1 . 接收器操作员将处理两个接收器之间的屏障 invoke() 调用并触发状态后端以执行检查点。然后由状态后端决定是否以及如何异步执行检查点。一旦触发检查点的调用返回,接收器就可以继续处理。一旦收到状态后端的通知,sink操作符将向jobmanager报告它完成了状态检查点。当所有操作员成功报告他们完成了检查点时,整个检查点就完成了。
这篇博文更详细地讨论了端到端的精确一次处理和sink操作符的要求。

相关问题