在Spark Structured Streaming应用程序更新期间避免重新处理数据

时间:2018-03-21 19:01:53

标签: apache-spark spark-structured-streaming

我在Spark 2.2中使用Structured Streaming。我们正在使用Kafka作为我们的来源,并且正在使用检查点进行故障恢复,并且只使用一次保证。我希望获得有关如何在有状态操作和/或输出模式发生更改时处理应用程序更新的更多信息。

正如一些消息来源所说,我可以启动与旧应用程序并行的更新应用程序,直到它在数据方面赶上旧应用程序,然后杀死旧应用程序。但是新应用程序必须重新读取/重新处理Kafka中的所有数据,这可能需要很长时间。

我想避免在新部署的更新应用程序中重新处理数据。

我能想到的一种方法是,除了检查点目录之外,应用程序还要将偏移量写入某些内容,例如在zookeeper/hdfs中。然后,在更新应用程序时,我命令Kafka readstream()开始读取存储在这个新位置(zookeeper/hdfs)中的偏移量 - 因为更新的应用程序无法从检查点目录中读取现在被认为是不相容的。

所以有几个问题:

  1. 上述解决方案是否是有效的解决方案?
  2. 如果是,我如何自动检测是否由于故障/维护而重新启动应用程序,或者是因为有状态操作和/或输出模式的代码更改?
  3. 感谢任何指导,示例或信息来源。

0 个答案:

没有答案