Skip to main content

容错

RisingWave 是一种容错的分布式流处理系统。本文通过回答以下问题,对 RisingWave 如何处理故障进行了整体概述:

  • RisingWave 如何从故障中恢复?
  • 发生故障时,RisingWave 如何确保数据的正确性和一致性?
  • RisingWave 的故障恢复对计算有何影响?

RisingWave 采用 Chandy-Lamport 算法 创建检查点。检查点是代表整个系统在特定时间点的一致状态的全局快照。在 RisingWave 中,检查点被持久化到一个持久且高度可用的远程存储中。

读取查询时,RisingWave 总是从上一个检查点获取数据。这确保了数据的正确性和一致性。

如果发生故障,只有未保存到下一个检查点的状态才会丢失。RisingWave 所有内部有状态的算子都将从上一个检查点获取状态。这种方法避免了全部重新计算,因此不会造成长时间延迟。检查点间隔可以配置,默认为 10 秒。这意味着故障造成的延迟不应超过 10 秒。

例如,假设 RisingWave 集群已摄取 Kafka 数据 24 小时,在 1:00:25 出现故障,而最后一次检查点是在 1:00:20。在这种情况下,RisingWave 不会重新计算一天前的数据,而是从 1:00:20 的检查点开始重新计算。

为了尽量减少对计算的影响并提高效率,检查点是增量创建的。自上次检查点之后生成的状态会增量持久化到远程存储中。RisingWave 会在后台运行远程压缩任务来压缩检查点中的状态。这样可以回收空间,并提高读取性能。