现在,我在SCDF中有一个流应用程序,它正在从数据库中的多个表中提取数据并将其复制到另一个数据库中。当前,我们的目标是减少给定流所做的工作量,因此我们希望将流拆分成多个流,并继续将数据复制到第二个数据库中。
是否有建议的设计模式将这些各种流的处理汇集为一个?
答案 0 :(得分:1)
如果我正确理解了这一要求,则希望按每个应用程序按数据库/表拆分摄取部分,然后将它们全部合并为一个“有效负载类型”以进行下游处理。
如果您确实确实希望按数据库/表划分摄取,则可以,但是您可能要考虑优点/缺点。一个明显的好处是粒度,您可以独立地独立更新应用程序,也可以重用。当然,它带来了其他挑战。个别应用程序的维护,修复和发布仅举几例。
也就是说,您可以将数据扇入单个消费者。这是一个示例:
foo1 = jdbc |转换| hdfs
foo2 = jdbc>:foo1.jdbc
foo3 = jdbc>:foo1.jdbc
foo4 = jdbc>:foo1.jdbc
在这里,foo1
是从特定数据库/表组合读取数据的主要管道。同样,foo2
,foo3
和foo4
可以从其他数据库/表组合中读取。但是,这3个流正在将消耗的数据写入命名目的地,在这种情况下,该目的地恰好是foo1.jdbc
(又称主题名称)。 SCDF在部署foo1
管道时会自动创建此目标;专门用于通过主题foo1.jdbc
连接“ jdbc”和“转换”应用程序。
总而言之,我们正在路由不同的表数据以使其降落在相同的目的地,因此下游App(在这种情况下,transform
处理器从不同的表中获取数据。
如果数据的相关性很重要,则可以在每个jdbc
处通过唯一键(例如,customer-id = 1001)在生产者处对数据进行分区,因此特定于上下文的信息位于同一位置transform
处理器实例(假设您要进行扩展处理的处理器实例数量为n)。