目录
流处理
流处理被定义为在没有交互或中断的情况下处理无限量的数据。流处理的业务案例包括:
- 实时信用卡欺诈检测或预测分析
- 用于可操作分析的近实时业务数据处理
Spring Cloud Data Flow 中的流处理在架构上实现为独立事件驱动的流应用程序的集合,这些应用程序使用选择的消息传递中间件进行连接,例如 RabbitMQ 或 Apache Kafka。独立应用程序的集合在运行时聚集在一起构成流数据管道。管道可以是线性的或非线性的,具体取决于应用程序之间的数据流。
消息中间件
部署的流应用程序通过消息传递中间件产品进行通信。我们提供通过RabbitMQ或 Kafka进行通信的预构建流应用程序,您可以使用这些应用程序与各种数据产品集成。
通过使用许多Spring Cloud Stream Binders之一,您可以使用许多不同的消息中间件产品。Spring Cloud Data Flow 支持以下流行平台:
Spring Cloud Stream
对于 Spring 开发人员,我们建议使用Spring Cloud Stream框架编写自定义 Stream 应用程序。Spring Cloud Stream 让您可以轻松构建与共享消息系统连接的高度可扩展的事件驱动微服务。
作为开发人员,您可以专注于开发应用程序的业务逻辑,同时将底层 API 复杂性和与消息代理的连接样板委托给 Spring Cloud Stream。
在高层次上,流应用程序可以通过消息中间件产生、处理或使用事件。
在云端运行流媒体应用
Cloud Foundry 和 Kubernetes 都支持在其平台上运行长期应用程序的概念。Cloud Foundry 将每一个都称为长期运行进程 (LRP)。在 Kubernetes 上,您可以使用部署资源,该资源反过来管理副本集,这些副本集保留指定数量的 pod 来运行您的应用程序。
虽然 Spring Cloud Stream 本身可以大大简化流式应用程序的编写,但是当手动部署一组独立的 Spring Cloud Streaming 应用程序时,您需要:
- 配置所有应用程序的输入和输出目标。
- 配置共享消费者组属性的公用名,以确保目的地上的消费者有适当的分离或合作。
- 配置多个属性,以启用应用程序识别和发布度量信息以进行监控。
- 配置与您的消息传递中间件的连接、创建目标并配置扩展和分区特征。
- 创建运行应用程序所需的平台资源。
当您在 Spring Cloud Data Flow 中将流应用程序集合部署为流定义的一部分时,系统会为您处理所有这些配置并创建必要的基础架构资源以在目标平台上运行您的应用程序。各种部署属性可让您自定义部署(例如,设置内存资源等常用属性、设置平台特定属性(如 Cloud Foundry 上的 buildpack)或设置 Kubernetes 部署上的标签)。
编排流媒体应用程序
一旦您使用 Spring Cloud Stream 或使用许多预构建的 Spring Cloud Stream 应用程序之一编写了流应用程序,您如何定义组成流数据管道的应用程序以及如何协调所有应用程序的启动?这就是 Spring Cloud Data Flow 可以提供帮助的地方。
Spring Cloud Data Flow 允许您通过使用拖放设计器或使用基于文本的域特定语言以及熟悉的管道和过滤器语法来定义流。有关详细信息,请参阅工具指南。
然后,您可以部署到 Kubernetes 或 Cloud Foundry。部署后,如果您需要更新单个应用程序,Spring Cloud Data Flow 通过提供一个简单的升级命令来触发平台上的蓝/绿部署,从而使这一切变得容易。有关更多信息,请参阅持续交付指南。
您可以使用各种流行的监控系统来监控流。我们演示 Prometheus 和 InfluxDB。然后,您可以使用提供的 Grafana 仪表板模板查看流。有关详细信息,请参阅监控部分。
批量处理
批处理被定义为在没有交互或中断的情况下处理有限数量的数据。实现批处理的应用程序被称为临时或短期应用程序。批处理的一个示例是计费应用程序。下图显示了这样一个应用程序:
该应用程序每晚运行,从平面文件中读取客户使用数据,为这些记录生成定价信息,并将计费信息插入计费表。一旦所有的使用数据都被读取和定价并且结果被插入到账单表中,应用程序就会停止。
这听起来很简单,但我们必须考虑如果批处理应用程序在运行 6 小时后因数据库用完表空间而失败,会发生什么情况。一旦添加了更多的表空间,我们就不想从一开始就重新开始处理。因此,计费应用程序需要能够从它停止的地方重新启动。
Spring Batch
在上一节中,我们表达了批量计费应用程序的最低要求。但是,在我们开始编写可重新启动功能、阅读器和编写器之前,我们应该看一下 Spring Batch。Spring Batch 提供了在处理大量记录时必不可少的可重用功能,包括日志记录和跟踪、事务管理、作业处理统计、作业重新启动、跳过和资源管理。Spring Batch 处理Batch Job
可重启性并提供 FlatFileItemReader
和 JdbcBatchItemWriter
,因此我们无需编写该样板代码。这样,我们可以专注于为使用数据定价的业务逻辑。
在云中运行批处理应用程序
我们现在可以看到 Spring Batch 如何在编写批处理应用程序时简化我们的生活,但是我们如何在云中运行批处理应用程序呢?Cloud Foundry 和 Kubernetes 都支持在其平台上运行临时(短期)应用程序的概念。Cloud Foundry 将临时应用程序称为任务,而 Kubernetes 将它们称为作业。但是要在云中运行临时应用程序,我们需要具备一些基本功能:
- 记录应用程序何时启动和停止。
- 记录应用程序的退出代码。
- 记录退出消息或应用程序返回的错误消息。
- 如果应用程序已经在运行,则具有阻止它运行的能力。
- 能够通知其他应用程序该应用程序已达到某些处理阶段。
这听起来像是很多工作,但 Spring Cloud Task 为您完成了所有这些工作,甚至更多。Spring Cloud Task 让您可以在本地或云端开发和运行短期微服务。您所要做的就是添加@EnableTask
注释。
编排批处理应用程序
下图显示了 Data Flow Server 如何管理多个云中的多个应用程序:
使用 Spring Batch 和 Spring Cloud Task 编写批处理应用程序后,如何协调应用程序的启动?这就是 Spring Cloud Data Flow 可以提供帮助的地方。Spring Cloud Data Flow 允许您通过临时请求或批处理作业调度程序启动批处理应用程序。此外,您可以在以下平台上启动批处理应用程序:
- 云铸造
- Kubernetes
- 本地服务器
Spring Cloud Data Flow 允许您通过 UI、RESTful api 或 Spring Cloud Data Flow Shell 启动或安排批处理应用程序的启动。