【问题标题】:Exactly-once: who is storing the historical data, flink or the data sourceExactly-once:谁在存储历史数据,flink 还是数据源
【发布时间】:2020-08-26 22:18:39
【问题描述】:

我知道 Apache Flink 有 Exactly once 的能力,它依赖于 checkpoint 机制和可重发的数据源。

按照我的理解,Flink 的算子如果出错了,需要重新运行上一次的操作,所以必须要获取历史数据。在这种情况下,历史数据应该/可以存储在哪里?

说数据源是Apache Kafka,那我可以让Kafka存储历史数据吗?我可以让 Flink 存储历史数据吗?或者我可以让他们两个都这样做吗?如果两个人能一起做这件事,是不是意味着我可以让Kafka存储一部分历史数据,让Flink存储另一部分历史数据,这样我就可以保存更多的历史数据?

【问题讨论】:

标签: apache-flink flink-streaming fault-tolerance exactly-once


【解决方案1】:

Flink 遵循数据流方法进行流处理。每个操作员处理一些元素并在处理后立即将它们发送到下游。

在源上会生成一些特殊的标记,称为检查点标记。当它们到达操作员时,它会检查状态并将标记发送到下游。

用于在运营商之间发送数据的通道也耐用。因此,每当一个操作员失败时,它只需要重播通道中的记录,这些记录是由最后一个操作员从最后一个成功的检查点发送的。由于跨操作员通道是持久的(按设计存储记录)并保证 FIFO,因此您无需在任何地方手动存储它们。 (我还没有找到他们如何做的细节。)

如果您使用 Kafka 作为源,Flink 也会处理其中的一次性语义。 (由于 Kafka 的持久性,记录被存储起来,可以再次读取。)

您只需要保证您的接收器是幂等的或支持精确一次语义的两阶段提交。

【讨论】:

    猜你喜欢
    • 2019-06-23
    • 1970-01-01
    • 2019-12-10
    • 2021-01-16
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多