Spring cloud dataflow 用于ETL的Spring云数据流

Spring cloud dataflow 用于ETL的Spring云数据流,spring-cloud-dataflow,Spring Cloud Dataflow,我们正试图通过利用SpringCloudDataflow设计一个ETL解决方案 这些要求主要是: 查询具有只读访问权限的外部源数据库,该访问权限可能高达~400k行 执行最低限度的转换/数据质量 使用jdbc接收器将/接收器上载到postgres数据集市。(每天上载前截断表) 每24小时运行一次 我们面临的一些挑战: 我们尝试使用JDBC source starter应用程序连接到源数据库, 但是,我们访问的数据库有一些限制,因为它们属于另一个部门,因此无法使用jdbc.update特性来更新

我们正试图通过利用SpringCloudDataflow设计一个ETL解决方案

这些要求主要是:

  • 查询具有只读访问权限的外部源数据库,该访问权限可能高达~400k行
  • 执行最低限度的转换/数据质量
  • 使用jdbc接收器将/接收器上载到postgres数据集市。(每天上载前截断表)
  • 每24小时运行一次
  • 我们面临的一些挑战:

    • 我们尝试使用JDBC source starter应用程序连接到源数据库,
      但是,我们访问的数据库有一些限制,因为它们属于另一个部门,因此无法使用jdbc.update特性来更新源数据库以将行标记为“seen”

    • 有没有推荐的方法可以在不耗尽内存的情况下查询和分页大型结果集?jdbc.max-rows-per-poll选项似乎不适合这种情况


    我们不喜欢使用任务/批处理,因为流管道功能更强大、更干净(数据可以在流中流动并转换)。是否有人成功地使用了SCDF流来实现类似的目标,或者它根本不是为这个用例设计的?

    所描述的需求可以在SCDF的流式和批处理模型中得到解决。而且,您似乎已经能够很好地关联这两个功能了。:)

    考虑的几个选项。

    对于#1,由于您没有办法说服数据库团队在现有表中添加一个新列,因此您可以构建一个定制流/批处理应用程序,模仿JDBC源代码的功能,但可以使用另一个数据存储来跟踪已经“看到”或“处理”的记录。最终,您需要某种形式的持久存储/缓存来决定处理哪些行,而不是哪些行

    或者,您可以构建一个自定义源,该源基于数据库中支持的CDC功能。我们正在尝试使用Debezium[见:]构建一个,在这个问题上有一个POC。这样,您只需依赖受支持数据库的CDC事件模型,就可以自动从表中接收新记录

    请随意试用POC,并用您的发现/用例对问题173进行评论

    #2更像是一个设计问题。如果一个大的结果集需要一次性处理,它是否适合流媒体模型?也许您可以将其设计为脱机处理的任务/批处理作业,以便更好地利用故障恢复和可重启性

    一旦你有了一个类似CDC的源,你所收到的将只是新的事件/行,所以这可能会自动处理流控制