用于ETL的Spring云数据流

问题描述 投票:1回答:1

我们正试图通过利用Spring云数据流来设计ETL解决方案。

要求主要是:

  1. 查询具有只读访问权限的外部源数据库,该访问权限可能大到约400k行
  2. 执行最小的转换/数据质量
  3. 使用jdbc接收器上传/接收到postgres数据集市。 (在每天上传之前截断表格)
  4. 每24小时运行一次

我们面临的一些挑战:

  • 我们尝试使用JDBC-source starter app连接到源数据库, 但是我们正在访问的数据库存在限制,因为它们由另一个部门拥有,因此无法使用更新源数据库以将行标记为“看到”的jdbc.update功能。
  • 是否有推荐的方法来查询和翻阅大型结果集而不会耗尽内存?在这种情况下,jdbc.max-rows-per-poll选项似乎不合适。

我们不希望使用Tasks / Batch,因为流管道功能更强大,更清晰(数据可以流过流并进行转换)。有没有人成功使用过SCDF流来达到类似的目标,还是只是没有为这个用例设计?

spring-cloud-dataflow
1个回答
1
投票

所描述的要求可以在SCDF中的Streaming和Batch模型中解决。并且,您似乎已经能够很好地与这两个功能相关联。 :)

一些选项需要考虑。

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

或者,您可以构建基于数据库支持的CDC功能的自定义源。我们正在尝试使用Debezium构建一个[参见:spring-cloud-stream-app-starters/app-starters-release#173],并且在tzolov/cdc-debezium上有关于此问题的POC。有了它,您只需依靠受支持的数据库的CDC事件模型,即可自动从表中接收新记录。

随意尝试POC,并在您的调查结果/用例中对问题#173发表评论。

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

一旦你有一个类似CDC的源,你收到的只会是新的事件/行,所以这可能会自动解决流量控制。

© www.soinside.com 2019 - 2024. All rights reserved.