我们正试图通过利用Spring云数据流来设计ETL解决方案。
要求主要是:
我们面临的一些挑战:
我们不希望使用Tasks / Batch,因为流管道功能更强大,更清晰(数据可以流过流并进行转换)。有没有人成功使用过SCDF流来达到类似的目标,还是只是没有为这个用例设计?
所描述的要求可以在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的源,你收到的只会是新的事件/行,所以这可能会自动解决流量控制。