1

我们目前正在开发一个使用 kafka、spark 流和 Cassandra 作为 DB 的系统。我们正在使用基于此处内容的检查点 [ http://spark.apache.org/docs/latest/streaming-programming-guide.html#checkpointing]。在用于创建 Streaming 上下文的函数中,我们使用 createDirectStream 创建我们的 DStream,从这一点开始,我们在不同的 RDD 上执行从调用 saveToCassandra 派生的几个转换和操作

我们正在运行不同的测试来确定应用程序在发生故障时应该如何恢复。关于我们的场景的一些关键点是:

  • 我们在 kafka 中使用固定数量的记录(在 1000 万到 2000 万之间)进行测试,这意味着我们从 kafka 消费一次,应用程序从 kafka 中获取所有记录。

  • 我们在其中一名工作人员中以 --deploy-mode 'client' 执行应用程序,这意味着我们手动停止和启动驱动程序。

我们不确定在创建 DStreams 后如何处理异常,例如,如果在写入 cassandra 时所有节点都死了,我们会得到一个异常中止作业,但在重新提交应用程序后,该作业不会重新调度并且应用程序不断消耗来自 kafka 的多个“isEmpty”调用。

我们在重新分区的 RDD 上使用“缓存”进行了几次测试(在失败后与停止和启动驱动程序不同),并更改参数“query.retry.count”、“query.retry”。延迟”和“spark.task.maxFailures”没有成功,例如,作业在 x 次失败后中止。

在这一点上,我们对如何使用检查点在失败后重新安排作业感到困惑。

4

0 回答 0