流处理入门
Spring Cloud Data Flow 提供了 70 多个预构建的流应用程序,您可以立即使用它们来实现常见的流用例。在本指南中,我们使用其中两个应用程序来构建一个简单的数据管道,该管道生成从外部 HTTP 请求发送的数据,并通过将有效负载记录到终端来使用该数据。
安装指南包括使用 Data Flow 注册这些预构建应用程序的说明。
流 DSL 概述
您可以通过外壳或仪表板使用领域特定语言 (DSL) 以及在 Java 中以编程方式创建流。仪表板还允许您将应用程序拖放到调色板上并以可视方式连接它们。仪表板是双向的,因此视觉操作会更新 DSL。同样,对 DSL 的编辑会更新流的视图。
DSL 仿照 Unix 管道和过滤器语法。例如,定义为的流 DSLhttp | log
表示http
应用程序将从 HTTP post 接收到的数据发送到消息传递中间件。应用程序从消息传递中间件接收带有该数据的消息并将其记录到终端
。log
DSL 中的每个名称都通过应用程序注册过程与一个应用程序相关联。应用程序通过|
代表消息传递中间件的符号连接,该符号充当应用程序之间的“管道”。
下图显示了流处理生命周期:
创建流
要创建流:
- 在菜单中,单击Streams。
- 单击创建流按钮。
屏幕变为下图: - 在文本区域中,键入
http | log
。 - 单击创建流。
- 输入
http-ingest
流名称,如下所示: - 单击创建流按钮。
出现定义页面。
部署流
现在您已经定义了一个流,您可以部署它。为此:
http-ingest
单击您在上一节中创建的定义 旁边的播放(部署)按钮。
UI 显示您可以应用到http-ingest
流中的应用程序的可用属性。下图中显示的此示例使用默认值:
如果您使用本地数据流服务器,请添加以下部署属性来设置端口以避免端口冲突:
如果将 Spring Cloud Data Flow 部署到 Kubernetes,请将源应用程序上的kubernetes.createLoadBalancer
部署属性设置为以对外公开服务,如下所示:true``http
- 单击部署流按钮。
UI 返回到定义页面。
流现在处于状态,完成部署后deploying
其状态变为 。deployed
您可能需要刷新浏览器才能看到更新的状态。
验证输出
部署应用程序后,您可以验证其输出。如何执行此操作取决于您运行应用程序的位置:
当地的
本节详细介绍了当您的应用程序在本地服务器上运行时如何验证输出。
测试数据
流部署并运行后,您可以发布一些数据。您可以使用以下 curl 命令执行此操作:
复制
curl http://localhost:20100 -H "Content-type: text/plain" -d "Happy streaming"
结果
部署流后,您可以查看其日志。为此:
- 单击菜单中的运行时。
- 单击
http-ingest.log
。 - 复制
stdout
仪表盘文本框中的路径 - 在另一个控制台窗口中,键入以下内容,替换
/path/from/stdout/textbox/in/dashboard
为您在上一步中复制的值:
复制
$ docker exec -it skipper tail -f /path/from/stdout/textbox/in/dashboard
日志接收器的输出出现在新窗口中。您应该看到如下所示的输出。
复制
log-sink : Happy streaming
当您看到发送 http 请求的足够输出时,按 Ctrl+C 结束tail
命令。
Kubernetes
本节详细介绍了当您的应用程序在 Kubernetes 上运行时如何验证输出。
通过运行命令获取 HTTP 服务 URL。
如果部署到支持负载均衡器的集群,您可以通过运行以下命令来确定 HTTP 服务地址:
复制
export SERVICE_URL="$(kubectl get svc --namespace default http-ingest-http-v1 -o jsonpath='{.status.loadBalancer.ingress[0].ip}'):8080"
LoadBalancer IP 可能需要几分钟才能可用。您可以通过运行查看服务器的状态kubectl get svc -w http-ingest-http-v1
如果使用 Minikube,可以使用以下命令获取服务器的 URL:
复制
export SERVICE_URL=$(minikube service --url test-http-v1)
您可以通过键入以下内容来查看应用程序的 HTTP URL:
echo $SERVICE_URL
测试数据
在 Kubernetes 中部署并运行流后,您现在可以发布一些数据。您可以使用以下 curl 命令执行此操作:
复制
curl $SERVICE_URL -H "Content-type: text/plain" -d "Happy streaming"
结果
结果应类似于以下示例:
复制
kubectl get pods
NAME READY STATUS RESTARTS AGE
http-ingest-log-v1-0-2k4r8 1/1 Running 0 2m
http-ingest-http-v1-qhdqq 1/1 Running 0 2m
mysql-777890292-z0dsw 1/1 Running 0 49m
rabbitmq-317767540-2qzrr 1/1 Running 0 49m
scdf-server-2734071167-bjd3g 1/1 Running 0 12m
skipper-2408247821-50z31 1/1 Running 0 15m
现在您可以验证日志,如下所示:
复制
kubectl logs -f http-ingest-log-v1-0-2k4r8
...
...
2017-10-30 22:59:04.966 INFO 1 --- [ http-ingest.http.http-ingest-1] log-sink : Happy streaming
删除流
现在您可以删除您创建的流。为此:
- 单击菜单中的流。
- 单击
http-ingest
行上的向下 V 形。 - 单击销毁流。
- 当提示确认时,单击Destroy Stream Definition(s)。
更新和回滚流
您可以在持续交付指南中找到此信息。
监控
您可以在Stream Monitoring指南中找到此信息。
批处理开发者指南
本节中有几个指南,但通过它们的共同起始路径包括:
- 遵循入门指南,该指南向您展示了如何使用预构建的应用程序通过 Spring Cloud Data Flow 创建和部署任务。
这使您可以快速了解如何使用仪表板创建流、部署流以及查看日志。 - 使用 Spring Cloud Task 开发自己的任务,手动将其部署到平台,并深入了解平台上发生的事情。
- 获取您开发的任务应用程序,将其注册到 Spring Cloud Data Flow,并将其部署到平台。
任务处理入门
在本指南中,我们创建一个简单的任务定义并启动该任务。
起点是使用Spring Cloud Task App Starters,它提供了一组任务应用程序。具体来说,我们使用提供的timestamp
应用程序,它基本上是一个记录当前时间戳的 hello-world 风格的应用程序。对于本指南,我们假设相应的timestamp
任务应用程序已经导入并注册到 Spring Cloud Data Flow,如安装指南中所述。
创建任务
要创建任务:
- 在菜单中,单击任务。
- 单击创建任务按钮。
- 在文本区域中,键入
timestamp
。这将创建一个使用 Timestamp 任务应用程序的简单任务定义。下图显示了时间戳应用程序:
或者,您也可以将 Timestamp 应用程序从左侧的应用程序面板拖到 Flo 画布上,并连接START
到END
任务应用程序。
- 单击
Create Task
。 - 输入
timestamp-task
作为名称,如下所示: - 单击
CREATE THE TASK
按钮。
将出现“任务定义”页面并列出创建的定义 (timestamp-task
),如下所示:
运行任务
现在您已经创建了任务定义,您可以运行它。为此:
timestamp-task
点击定义行的下拉控件,点击Launch选项,如下:
UI 允许您提供额外的:
- 属性:用于 a 的附加属性
TaskLauncher
。 - 参数:任何需要作为命令行参数传递的属性。
- 由于我们不需要提供额外的参数或参数,请单击LAUNCH THE TASK按钮。UI 返回到任务定义页面,如下:
片刻之后,任务定义应显示“完成”状态。您可能需要按REFRESH按钮才能查看更新的状态。
验证输出
要验证输出是否符合您的预期:
- 点击Task executions选项卡,如下:
您可以看到您的任务应用程序的退出代码为0
,表示执行成功。
- 单击
Execution ID
行上的 以查看更多详细信息,如下所示:
如果您还想查看时间戳日志,请单击页面底部的VIEW LOG按钮: