首页 > 解决方案 > 将多个流合并到单个流中的正确模式

问题描述

现在我在 SCDF 中有一个流应用程序,它从数据库中的多个表中提取数据并将其复制到另一个数据库。目前,我们的目标是减少给定流正在执行的工作量,因此我们希望将流拆分为多个流并继续将数据复制到第二个数据库中。

是否有任何推荐的设计模式可以将这些不同流的处理合并为一个?

标签: javaspring-cloud-dataflow

解决方案


如果我正确理解此要求,您可能希望按每个应用程序的 DB/Table 拆分摄取片段,然后将它们全部合并为一个“有效负载类型”以进行下游处理。

如果您确实想按 DB/Table 拆分摄取,则可以,但您可能需要考虑利弊。一个明显的好处是粒度,你可以独立地更新应用程序,也许还有可重用性。当然,它也带来了其他挑战。单个应用程序的维护、修复和发布,仅举几例。

也就是说,您可以将数据扇入单个消费者。这是一个例子:

foo1 = jdbc | 变换 | 高清晰度电视

foo2 = jdbc > :foo1.jdbc

foo3 = jdbc > :foo1.jdbc

foo4 = jdbc > :foo1.jdbc

这里,foo1是从特定 DB/表组合读取数据的主要管道。同样,foo2foo3foo4可以从其他 DB/表组合中读取。但是,这 3 个流正在将消费数据写入一个命名目标,在这种情况下恰好是foo1.jdbc(又名:主题名称)。这个目的地是由 SCDF 在部署foo1管道时自动创建的;专门将“jdbc”和“transform”应用程序与foo1.jdbc主题连接起来。

综上所述,我们将不同的表数据路由到同一个目的地,因此下游应用程序,在这种情况下,transform处理器从不同的表中获取数据。

If the correlation of data is important, you can partition the data at the producer by a unique key (e.g., customer-id = 1001) at each jdbc source, so context-specific information land at the same transform processor instance (assuming you've "n" number of processor instances for scaled-out processing).


推荐阅读