我知道Apache Flink一次具有完全的容量,这取决于检查点机制和可重发的数据源。
据我了解,如果Flink的操作员遇到某些错误,则它需要再次执行其最后一次操作,因此必须获取历史数据。在这种情况下,历史数据应该/应该存储在哪里?
说数据源是Apache Kafka,那么我可以让Kafka存储历史数据吗?我可以让Flink存储历史数据吗?或者我可以让他们两个都这样做吗?如果他们两个都可以一起做这件事,是否意味着我可以让Kafka存储一部分历史数据,让Flink存储另一部分历史数据,以便我可以保存更多历史数据?
Flink遵循数据流方法进行流处理。每个操作员都会处理某些元素,并在处理完后立即将其发送到下游。
在源处生成的特殊标记称为检查点标记。当他们到达操作员时,它会检查状态并向下游发送标记。
用于在操作员之间发送数据的通道也耐用。因此,每当操作员失败时,只需要重播最后一个操作员从上次成功检查点发送的通道中的记录。由于互操作员通道是持久的(通过设计存储记录)并保证FIFO,因此您无需在任何地方手动存储它们。 (我尚未找到有关其操作方式的详细信息。)
如果您将Kafka用作源,Flink也会在其中处理一次精确的语义。 (由于Kafka的持久性,记录被存储并可以再次读取。)
您只需要保证您的接收器是幂等的或支持针对一次语义的两阶段提交。