我想了解如何使Spark Streaming应用程序更容错(特别是在尝试写入下游依赖项时),并且我不知道最佳方法是处理尝试将结果写入外部源(如Cassandra,DynamoDB等)的失败。Apache Spark Streaming,如何处理下游依赖失败
例如,我有一个Spark Streaming作业,用于从Stream(Kafka,Flume等)中提取数据...我没有'最终确定使用哪种技术),将相似的项目汇总在一起,然后将结果写入外部商店。 (即Cassandra,DynamoDB或任何正在接收DStream计算的结果)。
我想弄清楚如何处理外部依赖不可写入的情况。也许集群发生故障,可能存在许可问题等,但我的工作无法将结果写入外部依赖关系。是否有办法暂停Spark Streaming,以便接收器不会继续批量处理数据?我是否应该睡眠当前批次并让Receiver继续存储批次?如果问题是暂时的(几秒钟),继续批处理可能是可以接受的,但是如果依赖关系下降几分钟或1+小时以上会发生什么?
我想过的一个观点是有一个监视进程,在后台监视依赖关系的健康状况,如果发现它是“不健康的”,它会停止工作。然后,当所有依赖关系都健康时,我可以开始备份作业并处理所有未写入外部源的数据。
我的另一个想法是以某种方式在DStream forEachRdd方法中发出信号,表示存在问题。是否有某种例外,我可以扔在DStream中,它会发回给驱动程序它应该停止?
如果任何人有任何关于如何处理External Fault Tolerance的经验,或者可以指向我的好文章/视频,那就太好了。
感谢
我不确定,但下游数据接收器/存储器本身应该处理故障吗?担心这一点超出了Spark的责任。此外,如果发生故障,则更多的是监控和警告,以便工程师可以得到通知并立即检查故障。 – keypoint