接入流
在 Spring Cloud Stream 术语中,命名目标是消息中间件或流平台中的特定目标名称。它可以是 RabbitMQ 中的 exchange
或 Apache Kafka 中的 topic
。在 Spring Cloud Data Flow 中,命名目标可以被视为直接 源
或 接收器
,具体取决于它充当发布者还是消费者。您可以从目标(例如:Kafka 主题)消费数据,也可以为目标(例如:Kafka 主题)生成数据。Spring Cloud Data Flow 允许您使用命名目标支持,构建从消息中间件上的目标到目标的事件流管道。
流 DSL 语法要求命名目标以冒号 (:
) 为前缀。
假设您想从 HTTP Web 端点收集用户点击事件,并将它们发送到名为 user-click-events
的 Kafka 主题。在这种情况下,您在 Spring Cloud Data Flow 中的流 DSL 如下所示
http > :user-click-events
现在,user-click-events
Kafka 主题已设置为从 HTTP Web 端点接收用户点击事件,从而充当 接收器
。
假设您想创建另一个事件流管道,该管道使用这些用户点击事件并将它们存储在 RDBMS 中。在这种情况下,流 DSL 如下所示
:user-click-events > jdbc
现在,Kafka 主题 user-click-events
充当 jdbc
应用程序的生产者。
一个常见的用例是通过从主流处理管道的事件发布者分叉相同的数据来构建并行事件流管道。考虑以下主流程
mainstream=http | filter --expression='payload.userId != null' | transform --expression=payload.sensorValue | log
当名为 mainstream
的流部署时,连接每个应用程序的 Kafka 主题将由 Spring Cloud Data Flow 使用 Spring Cloud Stream 自动创建。Spring Cloud Data Flow 根据 stream
和 application
命名约定命名这些主题,您可以使用相应的 Spring Cloud Stream 绑定属性覆盖这些名称。在这种情况下,将创建三个 Kafka 主题
mainstream.http
:将 HTTP 源的输出连接到过滤器处理器输入的 Kafka 主题mainstream.filter
:将过滤器处理器的输出连接到转换处理器输入的 Kafka 主题mainstream.transform
:将转换处理器的输出连接到日志接收器输入的 Kafka 主题
要创建接收来自主流程副本的并行流管道,您需要使用 Kafka 主题名称来构建事件流管道。例如,您可能希望利用 http
应用程序的输出构建一个新的事件流管道,该管道接收未过滤的数据。流 DSL 如下所示
unfiltered-http-events=:mainstream.http > jdbc
您可能还想利用 filter
应用程序的输出获取过滤数据的副本,以便在另一个下游持久性中使用,如下所示
filtered-http-events=:mainstream.filter > mongodb
在 Spring Cloud Data Flow 中,流的名称是唯一的。因此,它被用作从给定 Kafka 主题消费的应用程序的消费者组名称。这允许多个事件流管道获取相同数据的副本,而不是竞争消息。