如何级联 Spring Cloud Dataflow 流?
How to cascade Spring Cloud Dataflow streams?
我知道我可以在 Streams DSL 中使用扇入和扇出表示法在同一流中级联多个流修改器,例如:
s3 > :data
ftp > :data
http > :data
:data > file
但是,假设我注册了 stream1 和 stream2,每个都有自己的 DSL,我如何级联两者,做类似的事情?
例如:
stream1 DSL:
time | transform | file
stream2 DSL:
file | filter | http
然后我想创建类似 stream3 的东西:
stream1 | stream2 | s3
意味着 time
和 file
都将被读取,结果将写入 file
、http
和 s3
。可能吗?
我假设除了写入我指定的接收器之外,stream1
和 stream2
也会写回管道,所以我可以级联它们并从 [=22 调用它们=].
编辑 - 我正在尝试解决的问题。
正如评论中所问,让我详细说明一下我想在这里解决什么样的问题。
我工作的组织有复杂的流程,1 个团队不能维护整个事情,有数据生产者团队负责从源生成数据,直到最终的数据消费者通常有很多团队推断数据、转换、规范化等
stream1
,在我的例子中,将由公司的 1 个团队维护,steam2
由其他团队维护,stream3
由我的平台维护。
虽然维护每个流的团队是独立的,但从技术上讲,我仍然希望在聚合不同流时从内存流水线中受益。当然,我希望自己解决问题,例如 - 团队 1 发布了 stream1
的新版本,这将需要 stream2
的新版本 - 这对我的用例来说很好 - 我的团队可以照顾
有几种方法可以解决这个问题。
方案一:将processor+sink的职责合并为一个"processor";如果这样做了,您将能够将摄取(或)摄取 + 处理(或)摄取 + 处理 + 写入作为流管道的单独片段使用,并能够在 DSL 或 GUI 中使用它们。当然,这里组合的缺点是无法独立交互和升级业务逻辑,这对于一些用例来说可能不是问题。换句话说,您不一定需要将它们作为单独的微服务 - 如果职责很薄,将它们组合在一个应用程序中就完全没问题了。
选项 2:不要使用 SCDF。构建一组与之前讨论的类似的应用程序,并将它们编排为独立的应用程序。您不必处理 SCDF 中的源、处理器或接收器合同,因此您可以灵活地以您希望的任何方式插入应用程序。这里的缺点是手动编排。用于监控的数据管道可见性是另一回事。参见示例 here. If you still want to use it in SCDF, though it may not be ideal, there's a workaround - see here.
选项 3: 您还可以使用 Spring 集成构建集成流,并将其构建到 SCSt 应用程序中。这可以提供更精细的控制,但您必须像选项 2 中那样单独编排它们。这是一个 example.
使用路由器接收器连接流。 @sabby?
https://github.com/spring-cloud/spring-cloud-stream-modules/tree/master/router-sink
我知道我可以在 Streams DSL 中使用扇入和扇出表示法在同一流中级联多个流修改器,例如:
s3 > :data
ftp > :data
http > :data
:data > file
但是,假设我注册了 stream1 和 stream2,每个都有自己的 DSL,我如何级联两者,做类似的事情?
例如:
stream1 DSL:
time | transform | file
stream2 DSL:
file | filter | http
然后我想创建类似 stream3 的东西:
stream1 | stream2 | s3
意味着 time
和 file
都将被读取,结果将写入 file
、http
和 s3
。可能吗?
我假设除了写入我指定的接收器之外,stream1
和 stream2
也会写回管道,所以我可以级联它们并从 [=22 调用它们=].
编辑 - 我正在尝试解决的问题。
正如评论中所问,让我详细说明一下我想在这里解决什么样的问题。
我工作的组织有复杂的流程,1 个团队不能维护整个事情,有数据生产者团队负责从源生成数据,直到最终的数据消费者通常有很多团队推断数据、转换、规范化等
stream1
,在我的例子中,将由公司的 1 个团队维护,steam2
由其他团队维护,stream3
由我的平台维护。
虽然维护每个流的团队是独立的,但从技术上讲,我仍然希望在聚合不同流时从内存流水线中受益。当然,我希望自己解决问题,例如 - 团队 1 发布了 stream1
的新版本,这将需要 stream2
的新版本 - 这对我的用例来说很好 - 我的团队可以照顾
有几种方法可以解决这个问题。
方案一:将processor+sink的职责合并为一个"processor";如果这样做了,您将能够将摄取(或)摄取 + 处理(或)摄取 + 处理 + 写入作为流管道的单独片段使用,并能够在 DSL 或 GUI 中使用它们。当然,这里组合的缺点是无法独立交互和升级业务逻辑,这对于一些用例来说可能不是问题。换句话说,您不一定需要将它们作为单独的微服务 - 如果职责很薄,将它们组合在一个应用程序中就完全没问题了。
选项 2:不要使用 SCDF。构建一组与之前讨论的类似的应用程序,并将它们编排为独立的应用程序。您不必处理 SCDF 中的源、处理器或接收器合同,因此您可以灵活地以您希望的任何方式插入应用程序。这里的缺点是手动编排。用于监控的数据管道可见性是另一回事。参见示例 here. If you still want to use it in SCDF, though it may not be ideal, there's a workaround - see here.
选项 3: 您还可以使用 Spring 集成构建集成流,并将其构建到 SCSt 应用程序中。这可以提供更精细的控制,但您必须像选项 2 中那样单独编排它们。这是一个 example.
使用路由器接收器连接流。 @sabby?
https://github.com/spring-cloud/spring-cloud-stream-modules/tree/master/router-sink