java - 将多个流合并到单个流中的正确模式
问题描述
现在我在 SCDF 中有一个流应用程序,它从数据库中的多个表中提取数据并将其复制到另一个数据库。目前,我们的目标是减少给定流正在执行的工作量,因此我们希望将流拆分为多个流并继续将数据复制到第二个数据库中。
是否有任何推荐的设计模式可以将这些不同流的处理合并为一个?
解决方案
如果我正确理解此要求,您可能希望按每个应用程序的 DB/Table 拆分摄取片段,然后将它们全部合并为一个“有效负载类型”以进行下游处理。
如果您确实想按 DB/Table 拆分摄取,则可以,但您可能需要考虑利弊。一个明显的好处是粒度,你可以独立地更新应用程序,也许还有可重用性。当然,它也带来了其他挑战。单个应用程序的维护、修复和发布,仅举几例。
也就是说,您可以将数据扇入单个消费者。这是一个例子:
foo1 = jdbc | 变换 | 高清晰度电视
foo2 = jdbc > :foo1.jdbc
foo3 = jdbc > :foo1.jdbc
foo4 = jdbc > :foo1.jdbc
这里,foo1
是从特定 DB/表组合读取数据的主要管道。同样,foo2
、foo3
和foo4
可以从其他 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).
推荐阅读
- if-statement - “showpage()”在这段代码中是如何工作的?
- python - 使用单次调度上调
- vb.net - 暂时禁用所有其他 Windows vb.net
- html - 使用 html、css 和 bootstrap 创建页面指示器
- swift - 如何取消 NSPrintOperation
- python - 在python中有条件地比较不同数据框的列
- node.js - sql.Connection 不是构造函数
- cassandra - Cassandra:应用 TWCS 时还需要手动分桶吗?
- jquery - 使用 slice() 和 clone() 多次追加到同一个 div
- c# - 如何使用 C# 获取 XML 文件中所有元素的属性值?