【问题标题】:Spring cloud dataflow for ETLETL 的 Spring Cloud 数据流
【发布时间】:2019-07-23 09:04:22
【问题描述】:

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

要求主要是:

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

我们面临的一些挑战:

  • 我们尝试使用 JDBC-source starter 应用程序连接到源数据库,
    但是,我们访问的数据库存在限制,因为它们归另一个部门所有,因此无法使用 jdbc.update 更新源数据库以将行标记为“已见”的功能。

    李>
  • 是否有推荐的方法来查询和翻阅大型结果集而不会耗尽内存? jdbc.max-rows-per-poll 选项似乎不适合这种情况。

我们不喜欢使用 Tasks / Batch,因为流管道更强大、更干净(数据可以流过流并转换)。有没有人成功地使用 SCDF 流来实现类似的目标,或者它根本不是为这个用例设计的?

【问题讨论】:

    标签: spring-cloud-dataflow


    【解决方案1】:

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

    需要考虑的几个选项。

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

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

    请随意试用 POC 并用您的发现/用例对问题 #173 发表评论。

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

    一旦您有了类似 CDC 的源,您收到的将只是新的事件/行,因此可能会自动解决流控制问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 2019-03-02
      • 2017-12-10
      • 2018-10-24
      • 2016-10-13
      • 2019-10-17
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多