2016-09-20 71 views
0

我注意到火花流实例也有检查点的代码。我的问题是检查点的重要性。如果它具有容错能力,那么在这样的流媒体应用程序中发生故障的频率如何?火花流传输中是否需要点校验

+2

检查点的重要性仅取决于您的要求和业务逻辑。如果你想执行有状态操作,你不能接受数据丢失,否则它是强制性的,否则它是可选的。如果你有几个节点失败的可能性很小(这并不意味着你不应该为此准备),如果你有一千个节点,你可以预计每天失败。最重要的是软件问题。 – zero323

回答

2

这一切都取决于您的使用情况。假设您正在运行流式作业,它只是从卡夫卡读取数据并计算记录数量。如果你的应用程序在一年左右后崩溃,你会怎么做?

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

或者,如果你只是在做是有一个流应用程序,它只是读取-消息 - 从 - 卡夫卡>>>变换分析>>>插入到一个数据库内,我不用担心我的应用程序崩溃。即使它崩溃了,我也可以简单地恢复我的应用程序而不会丢失数据。

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

即将到来的容错频率,你几乎可以永远不会预测中断。在公司,

  • 有可能是停电集群
  • 经常修的/升级

希望这会有所帮助。

1

有两种情况:

  1. 你正在做的状态操作,如updateStateByKey,然后 你必须使用检查点 - 每一个状态保存。如果不设置 检查点目录,则会引发异常。
  2. 你正在做的只有窗口操作 - 那么是的,你可以禁用检查点。不过,我强烈建议设置检查点目录。

当司机死亡时,你将失去所有的数据和进度信息。点检可帮助您从这种情况下恢复应用程序。

失败是正常情况吗?当然!想象一下,你拥有大型集群,许多机器,以及这些机器中的许多组件。如果其中一个组件失败,那么你的应用程序也会失败。当连接到驱动程序丢失 - 您的应用程序失败。使用checkpoiting,你可以再次运行应用程序,它会恢复状态。