只有一次:谁在存储历史数据,flink还是数据源

qco9c6ql  于 2021-06-26  发布在  Flink
关注(0)|答案(1)|浏览(469)

我知道apache flink的容量只有一次,这依赖于检查点机制和可保留的数据源。
据我所知,如果flink的一个操作符出错,它需要使它的最后一个操作重新运行,所以它必须获得历史数据。在这种情况下,历史数据应该/可以存储在哪里?
说数据源是apache kafka,我能让kafka存储历史数据吗?我能让Flink保存历史数据吗?或者我能让他们两个都这么做吗?如果他们两个能一起做这件事,是不是意味着我可以让Kafka存储一部分历史数据,让Flink存储另一部分历史数据,这样我可以保存更多的历史数据?

bxjv4tth

bxjv4tth1#

flink遵循数据流方法进行流处理。每个操作符处理一些元素,并在处理后立即将它们发送到下游。
在源代码中生成的特殊标记称为检查点标记。当它们到达操作员时,它检查状态并将标记发送到下游。
用于在操作员之间发送数据的通道也是持久的。因此,每当一个操作员失败时,它只需要重放通道中最后一个操作员从最后一个成功的检查点发送的记录。由于操作员间通道是持久的(按设计存储记录)并保证fifo,因此您不需要在任何地方手动存储它们(我还没有找到他们是如何做到这一点的细节。)
如果您使用Kafka作为源代码,flink也会处理那里的once语义(由于Kafka的持久性,记录被存储起来,可以再次读取。)
您只需要保证sink是幂等的,或者支持两阶段提交一次。

相关问题