将多个流汇集到单个流中的正确模式
Proper pattern for funneling processing of multiple streams into a single stream
现在我在 SCDF 中有一个流应用程序,它从一个数据库的多个表中提取数据并将其复制到另一个数据库。目前,我们的目标是减少给定流正在执行的工作量,因此我们希望将流拆分为多个流并继续将数据复制到第二个数据库中。
是否有任何推荐的设计模式来将这些不同的流处理汇集到一个?
如果我对这一要求的理解正确,您可能希望将每个应用程序的摄取部分拆分为 DB/Table,然后将它们全部合并为一个“有效负载类型”以供下游处理。
如果您真的想按 DB/Table 拆分摄取,您可以,但您可能需要考虑 pros/cons。一个明显的好处是粒度,您可以单独更新应用程序,也许还有可重用性。当然,它带来了其他挑战。个别应用程序的维护、修复和发布等等。
也就是说,您可以将数据扇入到单个消费者。这是一个例子:
foo1 = jdbc | transform | hdfs
foo2 = jdbc > :foo1.jdbc
foo3 = jdbc > :foo1.jdbc
foo4 = jdbc > :foo1.jdbc
此处,foo1
是从特定 DB/Table 组合读取数据的主要管道。同样,foo2
、foo3
和 foo4
可以从其他 DB/Table 组合中读取。但是,这 3 个流正在将消耗的数据写入命名目标,在本例中恰好是 foo1.jdbc
(又名:主题名称)。这个目的地是在部署 foo1
管道时由 SCDF 自动创建的;专门用于将“jdbc”和“转换”应用与 foo1.jdbc
主题联系起来。
综上所述,我们将不同的 table 数据路由到同一目的地,因此下游 App,在这种情况下,transform
处理器从不同的 [=41] 获取数据=]s.
如果数据的相关性很重要,您可以通过每个 jdbc
源的唯一键(例如,customer-id = 1001)在生产者处对数据进行分区,因此特定于上下文的信息位于相同的 transform
个处理器实例 (假设您有“n”个处理器实例用于横向扩展处理)。
现在我在 SCDF 中有一个流应用程序,它从一个数据库的多个表中提取数据并将其复制到另一个数据库。目前,我们的目标是减少给定流正在执行的工作量,因此我们希望将流拆分为多个流并继续将数据复制到第二个数据库中。
是否有任何推荐的设计模式来将这些不同的流处理汇集到一个?
如果我对这一要求的理解正确,您可能希望将每个应用程序的摄取部分拆分为 DB/Table,然后将它们全部合并为一个“有效负载类型”以供下游处理。
如果您真的想按 DB/Table 拆分摄取,您可以,但您可能需要考虑 pros/cons。一个明显的好处是粒度,您可以单独更新应用程序,也许还有可重用性。当然,它带来了其他挑战。个别应用程序的维护、修复和发布等等。
也就是说,您可以将数据扇入到单个消费者。这是一个例子:
foo1 = jdbc | transform | hdfs
foo2 = jdbc > :foo1.jdbc
foo3 = jdbc > :foo1.jdbc
foo4 = jdbc > :foo1.jdbc
此处,foo1
是从特定 DB/Table 组合读取数据的主要管道。同样,foo2
、foo3
和 foo4
可以从其他 DB/Table 组合中读取。但是,这 3 个流正在将消耗的数据写入命名目标,在本例中恰好是 foo1.jdbc
(又名:主题名称)。这个目的地是在部署 foo1
管道时由 SCDF 自动创建的;专门用于将“jdbc”和“转换”应用与 foo1.jdbc
主题联系起来。
综上所述,我们将不同的 table 数据路由到同一目的地,因此下游 App,在这种情况下,transform
处理器从不同的 [=41] 获取数据=]s.
如果数据的相关性很重要,您可以通过每个 jdbc
源的唯一键(例如,customer-id = 1001)在生产者处对数据进行分区,因此特定于上下文的信息位于相同的 transform
个处理器实例 (假设您有“n”个处理器实例用于横向扩展处理)。