3

我注意到火花流示例也有用于检查点的代码。我的问题是检查点有多重要。如果它具有容错性,那么此类流应用程序中多久会发生一次故障?

4

2 回答 2

3

这完全取决于您的用例。假设您正在运行一个流式作业,它只是从 Kafka 读取数据并计算记录数。如果您的应用程序在一年左右后崩溃,您会怎么做?

  • 如果您没有备份/检查点,则必须重新计算前一年的所有有价值数据,以便恢复计数。
  • 如果您有备份/检查点,您可以简单地读取检查点数据并立即恢复。

或者,如果您只是拥有一个流应用程序,它只是 Reads-Messages-From-Kafka >>> Tranform >>> Insert-to-a-Database,我不必担心我的应用程序崩溃。即使它崩溃了,我也可以简单地恢复我的应用程序而不会丢失数据。

注意:检查点是一个存储 Spark 应用程序当前状态的过程。

谈到容错频率,您几乎无法预测中断。在企业中,

  • 可能会停电
  • 定期维护/升级集群

希望这可以帮助。

于 2016-09-20T19:29:53.430 回答
1

有两种情况:

  1. 您正在执行有状态操作,例如 updateStateByKey,那么您必须使用检查点 - 每个状态都被保存。不设置检查点目录,会抛出异常。
  2. 您只执行窗口操作 - 那么是的,您可以禁用检查点。但是我强烈建议设置检查点目录。

当驱动程序被杀死时,您将丢失所有数据和进度信息。检查点可帮助您从此类情况中恢复应用程序。

失败是正常情况吗?当然!想象一下,您有大型集群、许多机器、这些机器中的许多组件。如果这些组件之一失败,那么您的应用程序也将失败。当与驱动程序的连接丢失时 - 您的应用程序失败。通过检查点,您可以再次运行应用程序,它将恢复状态。

于 2016-09-21T10:45:15.367 回答