Spring XD 流或批处理作业

Spring XD stream or batch job

我正在评估 Spring XD 作为从 Mongo 到 Netezza(我们的关系数据仓库)的夜间 ETL 批处理的替代品。

我的流程每天需要执行一次或多次以下操作,我希望每天有几百万条记录,因此我必须进行 JDBC 批处理:

  1. 通过简单查询获取数据仓库中的最新记录 (select max(lastUpdateDtm) from xyz')
  2. 使用该时间戳从 Mongo 中获取在该日期
  3. 之后修改的所有记录
  4. Translate/decompose mongo 文档分为几个 JDBC 行('SqlParameterSource' 对象)并每 10k 行左右提交一次
  5. 调用 Netezza 中的存储过程来更新几个 tracking/history 表。

我看到了两种方法,但都有缺点:

  1. 使用 spring-xd 流(即:"trigger --cron 1 * * * | mongo | jdbc")
    • jdbc sink 不是面向批处理的,我买不起 10+百万个单独的 JDBC 插入,所以我可能不得不编写自己的 sink。
    • 不太确定如何在不必双重定义 jdbc 参数的情况下优雅地执行初始时间戳查找查询。与步骤 4 相同。
  2. 使用带有初始时间戳查找 tasklet 的批处理作业并使用 MongoReader 和 JdbcBatchWriter 然后组成这样的流 "trigger --cron 1 * * * > queue:job:myBatchJob"
    • 这似乎不太可重用,可能需要更多工作

有什么建议或建议吗?

由于批处理作业更适合您的用例(用于面向块的处理等),您可能希望基于批处理作业通知构建一个触发批处理作业(在每个步骤)的流(来自上一步)。

要使用职位通知,您可以参考这里:http://docs.spring.io/spring-xd/docs/current-SNAPSHOT/reference/html/#_retrieve_job_notifications