1 前言

欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用。不仅找不到很多中文资料,英文资料也一样少的可怜。这让探索的路更加艰辛,也更加有趣吧。

Spring Cloud Data Flow是基于微服务的,专门用于流式和批式数据处理的框架。

2 基本概念

2.1 数据处理模式

数据处理有两种模式,分别是Streaming流式处理Batch批次处理Streaming是长时间一直存在的,你数据来了我就处理,没来我就等着,基于消息驱动。Batch是处理时间较短的,启动一次处理一次,处理完就退出任务,需要去触发任务。

一般地,我们会基于Spring Cloud Stream框架来开发Streaming应用,而基于Spring Cloud TaskSpring Batch框架来开发Batch应用。完成开发后,可以打包成两种形式:

  • (1)Springboot式的jar包,可以放在maven仓库、文件目录或HTTP服务上;
  • (2)Docker镜像。

对于Stream,有三个概念是需要理解的:

  • (1)Source:消息生产者,负责把消息发送到某个目标;
  • (2)Sink:消息消费者,负责从某个目标读取消息;
  • (3)Processor:联合SourceSink,它从某个目标消费消息,然后发送到另一个目标。

2.2 特性

Spring Cloud Data Flow有许多好的特性值得我们学去使用它:

  • 基于云的架构,可部署在Cloud FoundryKubernetesOpenShift等。

  • 有许多可选择的开箱即用的流处理和批处理应用组件。

  • 可自定义应用组件,且是基于Springboot风格的编程模型。

  • 有简单灵活的DSL(Domain Specific Language)去定义任务处理逻辑。

  • 有美观的Dashboard能可视化地定义处理逻辑、管理应用、管理任务等。

  • 提供了REST API,可以在shell命令行模式下进行交互。

2.3 服务端组件

服务端有两个重要的组件:Data Flow ServerSkipper Server。两者作用不同,互相协作。

Data Flow Server的主要作用有:

  • 解析DSL
  • 校验和持久化StreamTaskBatch的定义;
  • 注册应用如jar包应用和docker应用;
  • 部署Batch到一个或多个平台;
  • 查询JobBatch的历史执行记录;
  • Stream的配置管理;
  • 分发Stream部署到Skipper

Skipper Server主要作用有:

  • 部署Stream到一个或多个平台;
  • 基于有灰度/绿色更新策略地更新或回滚Stream
  • 保存每一个Stream的描述信息。

可以看出,如果不需要使用Stream,可以不用部署Skipper。两者都需要依赖关系型数据库(RDBMS),默认会使用内置的H2,支持的数据库有H2HSQLDBMYSQLOraclePostgreSqlDB2SqlServer

2.4 运行环境

优秀的Spring的解耦能力总是特别强,Server和应用可以运行在不同的平台。我们可以把Data Flow ServerSkipper Server部署在LocalCloud FoundryKuernetes,而Server又可以把应用部署在不同的平台。

  • 服务端Local:应用Local/Cloud Foundry/Kuernetes;
  • 服务端Cloud Foundry:应用Cloud Foundry/Kuernetes;
  • 服务端Kuernetes:应用Cloud Foundry/Kuernetes。

一般情况下,我们会把Server和应用部署在同一平台上。对于生产环境,建议还是在Kuernetes上比较合适。

3 本地模式安装使用

为了快速体验,我们使用最简单的本地运行环境。

3.1 下载Jar包

下载以下三个jar包:

  1. wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-dataflow-server/2.5.3.RELEASE/spring-cloud-dataflow-server-2.5.3.RELEASE.jar
  2. wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-dataflow-shell/2.5.3.RELEASE/spring-cloud-dataflow-shell-2.5.3.RELEASE.jar
  3. wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-skipper-server/2.4.3.RELEASE/spring-cloud-skipper-server-2.4.3.RELEASE.jar

如果是简单的Batch应用,可以只下载spring-cloud-dataflow-server-2.5.3.RELEASE.jar

3.2 启动应用

  1. # 启动Skipper,默认端口为7577
  2. java -jar spring-cloud-skipper-server-2.4.3.RELEASE.jar
  3. # 启动Data Flow Server,默认端口为9393
  4. java -jar spring-cloud-dataflow-server-2.5.3.RELEASE.jar

启动完成后,访问UI:http://localhost:9393/dashboard

3.3 部署应用

3.3.1 添加应用Applications

只有添加了应用,才能部署BatchStream。官方提供了示例Applications,我们直接使用就可以了:

添加成功后,在应用列表可以查看:

3.3.2 创建Task

创建Task可以图形化创建,也可以通过DSL来创建,非常方便:

定义好Task后,输入名字创建:

3.3.3 运行Task

直接点击运行:

可以传入参数:

3.3.4 查看Task运行情况

可以查看运行日志:

3.4 Data Flow Shell命令行

除了在网页上,还可以通过命令行模式来与Server进行交互。

启动应用:

  1. $ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar
  2. ____ ____ _ __
  3. / ___| _ __ _ __(_)_ __ __ _ / ___| | ___ _ _ __| |
  4. \___ \| '_ \| '__| | '_ \ / _` | | | | |/ _ \| | | |/ _` |
  5. ___) | |_) | | | | | | | (_| | | |___| | (_) | |_| | (_| |
  6. |____/| .__/|_| |_|_| |_|\__, | \____|_|\___/ \__,_|\__,_|
  7. ____ |_| _ __|___/ __________
  8. | _ \ __ _| |_ __ _ | ___| | _____ __ \ \ \ \ \ \
  9. | | | |/ _` | __/ _` | | |_ | |/ _ \ \ /\ / / \ \ \ \ \ \
  10. | |_| | (_| | || (_| | | _| | | (_) \ V V / / / / / / /
  11. |____/ \__,_|\__\__,_| |_| |_|\___/ \_/\_/ /_/_/_/_/_/
  12. 2.5.3.RELEASE
  13. Welcome to the Spring Cloud Data Flow shell. For assistance hit TAB or type "help".
  14. Successfully targeted http://localhost:9393/
  15. dataflow:>app list
  16. ╔═══╤══════╤═════════╤════╤════════════════════╗
  17. ║app│source│processor│sink│ task ║
  18. ╠═══╪══════╪═════════╪════╪════════════════════╣
  19. ║ │ │ │ │composed-task-runner║
  20. ║ │ │ │ │timestamp-batch ║
  21. ║ │ │ │ │timestamp ║
  22. ╚═══╧══════╧═════════╧════╧════════════════════╝
  23. dataflow:>

4 总结

本文使用的是官方提供的应用,我们可以自己开发应用并注册到Server上。Local模式适合开发环境适合,生产环境还是部署在Kubernetes比较靠谱。后面我们再来探索吧。


欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

Spring Cloud Data Flow初体验,以Local模式运行的更多相关文章

  1. 把Spring Cloud Data Flow部署在Kubernetes上,再跑个任务试试

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubern ...

  2. Spring Cloud Data Flow用Shell来操作,方便建立CICD

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 之前我们用两篇文章讲解了Spring Cloud Data Flow,例子都是用UI操作的,但我们在Linux系统上经常是无 ...

  3. Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合Dat ...

  4. Spring Cloud Data Flow整合UAA使用外置数据库和API接口

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 之前的文章<Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制 ...

  5. Spring Cloud Data Flow整合UAA之使用LDAP进行账号管理

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Data Flow整合UAA的文章已经写了两篇,之前的方案是把用户信息保存在数据库中: ...

  6. Spring Cloud Data Flow 中的 ETL

    Spring Cloud Data Flow 中的 ETL 影宸风洛 程序猿DD 今天 来源:SpringForAll社区 1 概述 Spring Cloud Data Flow是一个用于构建实时数据 ...

  7. 【SFA官方译文】:Spring Cloud Data Flow中的ETL

    原创: 影宸风洛 SpringForAll社区 昨天 原文链接:https://www.baeldung.com/spring-cloud-data-flow-etl 作者:Norberto Ritz ...

  8. Spring Cloud 负载均衡初体验

    目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...

  9. spring cloud consul上下线体验

    spring cloud consul中默认会将spring.application.name作为ID 同一服务起多个实例时,ID默认会变成${spring.application.name}-${s ...

随机推荐

  1. 【译】Exception Helper – Rethrown Exceptions

    是否曾经在异步编程时引发过异常?因为调试器没有显示异常发生的位置而感到沮丧?或者在查看具有内部异常的异常时感到沮丧?调试器不容易显示该异常来自何处.从 Visual Studio 2019 16.5 ...

  2. QQ群消息监听并将消息存储到SQLite数据库中

    目录 一.前言 二.效果图 1.插件界面 2.SQLite数据库 3.QQ群消息 三.准备工作 1.CQA软件 2.CQA-SDK易语言版本 3.易语言破解版 4.使用到的相关模块 四.开始撸代码 五 ...

  3. Pop!_OS下安装C++编程工具

    Pop!_OS下C++编程 #0x0 Visual Studio Code #0x1 C++ 0x11 code::blocks #0x0 Visual Studio Code 下载安装vscode ...

  4. 外部应用复制 表格 到word中 设置表格自适应

    word 批量设置表格宽度自适应 描述 : 我们经常从 外部 如 excel,html 等其他文件 中复制的表格到word 文档 经常会出现在 word 中显示不全的问题 主要是源格式的表格 宽度比 ...

  5. 一小时完成后台开发:DjangoRestFramework开发实践

    DjangoRestFramework开发实践 在这之前我写过一篇关于Django与Drf快速开发实践的博客,Django快速开发实践:Drf框架和xadmin配置指北,粗略说了一下Drf配置和基本使 ...

  6. Scala 面向对象(十三):隐式转换和隐式参数

    隐式转换的实际需要=>指定某些数据类型的相互转化 1 隐式函数基本介绍 隐式转换函数是以implicit关键字声明的带有单个参数的函数.这种函数将会自动应用,将值从一种类型转换为另一种类型 隐式 ...

  7. python生成器原理剖析

    python生成器原理剖析 函数的调用满足"后进先出"的原则,也就是说,最后被调用的函数应该第一个返回,函数的递归调用就是一个经典的例子.显然,内存中以"后进先出&quo ...

  8. P1136 迎接仪式 题解

    题目描述 LHX教主要来X市指导OI学习工作了.为了迎接教主,在一条道路旁,一群Orz教主er穿着文化衫站在道路两旁迎接教主,每件文化衫上都印着大字.一旁的Orzer依次摆出"欢迎欢迎欢迎欢 ...

  9. 设计模式:Iterator模式

    目的:将数据的存储和数据的查询分开,降低数据的耦合性 继承关系图: 例子: //定义迭代器接口 template<typename T> class Iterator { public: ...

  10. python的__get__方法看这一篇就足够了

    get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...