Knative Eventing 之 Sequence 介绍

在处理数据时,往往会涉及到一个数据需要进行多次加工,这时候我们一般是通过Pipeline的方式进行处理。那么在Knative Eventing中是否也能支持对一个事件进行分步骤多次处理? 这个还真有。从 0.7 版本开始,Knative Eventing中提供了一个 Sequence 资源模型,可用于事件Pipeline处理。

Sequence 定义

首先我们看一下Sequence Spec定义:

apiVersion: messaging.knative.dev/v1alpha1
kind: Sequence
metadata:name: test
spec:channelTemplate:apiVersion: messaging.knative.dev/v1alpha1kind: InMemoryChannelsteps:- ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: testreply:kind: BrokerapiVersion: eventing.knative.dev/v1alpha1name: test

Sequence Spec包括3个部分:

  1. steps: 在step中定义了按照顺序执行的服务,每个服务会对应创建Subscription。
  2. channelTemplate:指定了使用具体的那个Channel
  3. reply:(可选)定义了最后一个step返回结果的响应目标

在 Broker/Trigger 模型中使用 Sequence

我们将创建以下逻辑配置。创建一个 cronjobsource,向 Broker 提供事件,然后创建一个 filter,将这些事件连接到由3个 step 组成的 Sequence 中。然后,我们获取最后的step返回结果事件发送给给Broker,并创建另一个 Trigger,该 Trigger 随后将显示事件结果。
对于这个例子,这里设置一个 Broker 程序、一个 InMemoryChannel 以及一个 Knative Service(用于显示事件结果)。示例使用 default namespace。
如果要使用不同类型的Channel,则需要修改sequence.spec.channeltemplate以创建对应的 Channel 资源。

创建 Knative Service

首先创建3个Knative Service,用于 Sequence 中服务处理

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: first
spec:template:spec:containers:- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700env:- name: STEPvalue: "0"---
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: second
spec:template:spec:containers:- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700env:- name: STEPvalue: "1"
---
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: third
spec:template:spec:containers:- image: us.gcr.io/probable-summer-223122/cmd-03315b715ae8f3e08e3a9378df706fbb@sha256:2656f39a7fcb6afd9fc79e7a4e215d14d651dc674f38020d1d18c6f04b220700env:- name: STEPvalue: "2"---

执行创建命令:

kubectl -n default create -f ./steps.yaml

创建 Sequence

创建Sequence,这里依次顺序执行[first->second->third]这3个服务。将最终处理的结果发送到broker-test中。

apiVersion: messaging.knative.dev/v1alpha1
kind: Sequence
metadata:name: sequence
spec:channelTemplate:apiVersion: messaging.knative.dev/v1alpha1kind: InMemoryChannelsteps:- ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: first- ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: second- ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: thirdreply:kind: BrokerapiVersion: eventing.knative.dev/v1alpha1name: broker-test

执行如下命令:

kubectl -n default create -f ./sequence.yaml

创建CronJobSource指向Broker

这里将创建一个 cronjobsource,它将每2分钟发送一个{"message": "Hello world!"} 信息到 broker-test 中。

apiVersion: sources.eventing.knative.dev/v1alpha1
kind: CronJobSource
metadata:name: cronjob-source
spec:schedule: "*/2 * * * *"data: '{"message": "Hello world!"}'sink:apiVersion: eventing.knative.dev/v1alpha1kind: Brokername: broker-test

执行命令如下:

kubectl -n default create -f ./cron-source.yaml

为Sequence创建Trigger

创建订阅事件类型为:dev.knative.cronjob.event 的 Trigger, 用于Sequence 进行消费处理。

apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:name: sequence-trigger
spec:filter:sourceAndType:type: dev.knative.cronjob.eventsubscriber:ref:apiVersion: messaging.knative.dev/v1alpha1kind: Sequencename: sequence

执行如下命令:

kubectl -n default create -f ./trigger.yaml

创建结果订阅 Trigger

创建结果订阅 Trigger,订阅samples.http.mod3 的事件类型,对 sequence 执行的结果进行显示

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: sequence-display
spec:template:spec:containers:- image: gcr.io/knative-releases/github.com/knative/eventing-sources/cmd/event_display
---
apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:name: sequence-trigger
spec:filter:sourceAndType:type: samples.http.mod3subscriber:ref:apiVersion: serving.knative.dev/v1alpha1kind: Servicename: sequence-display
---

结论

通过 Sequence 资源模型,我们很容易在 Knative Eventing 中实现事件处理的 Pipeline。对于需要多步骤处理的服务尤为适合。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基金会亚太区与开源中国达成战略合作 共同推动中国开源人才培养

北京时间2020年4月24日,Linux基金会亚太区(LFAPAC)与开源中国战略发布会暨LF开源软件大学联合启动仪式圆满落幕。发布会获得了多家业内知名企业的大力支持,邀请了50余家国内外新闻媒体参与直播报道。 会上,Linux基金会…

TortoiseGit 基础5部曲

文章目录1. 新增/修改文件2. 将工作区文件提交到本地仓库3. 更新最新版本项目到本地4. 将本地仓库中变动文件记录推送远程仓库5.登陆远程验证1. 新增/修改文件 新建VersionOfTheContrast.java文件,添加内容如下 2. 将工作区文件提交到本地仓库 3. 更新最新版本项…

即将发版!Apache Flink 1.9 版本有哪些新特性?

2019阿里云峰会上海开发者大会于7月24日盛大开幕,本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货,共同探讨前沿科技趋势。本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼…

TortoiseGit 单文件版本对比_入门试炼_09

文章目录一、单文件版本数据模拟二、单文件版本对比2.1. 查询单文件提交记录2.2. 单文件版本之间差异对比案例场景: 依次提交5次,推送远程,同一个文件5个版本之间的相互对比 一、单文件版本数据模拟 (企业内部) TortoiseGit 基础5方针_入门试…

数据库激荡 40 年,深入解析 PostgreSQL、NewSQL 演进历程

作者 | 张秋剑,天云数据上海副总经理责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)近日,有传闻 PostgreSQL 会发布 13 版本,这是去年 9 月发布 12 版本之后,PG 社区紧锣密鼓…

那些年,我们见过的Java服务端乱象

导读 查尔斯狄更斯在《双城记》中写道:“这是一个最好的时代,也是一个最坏的时代。”移动互联网的快速发展,出现了许多新机遇,很多创业者伺机而动;随着行业竞争加剧,互联网红利逐渐消失,很多创…

看!闲鱼又开源了一个 Flutter 开发利器

阿里妹导读:随着 Flutter 这一框架的快速发展,有越来越多的业务开始使用 Flutter 来重构或新建其产品。但在我们的实践过程中发现,一方面 Flutter 开发效率高,性能优异,跨平台表现好,另一方面 Flutter 也面…

这些常见的分布式存储系统,你是否都了解?

来源 | 清平の乐来源 | CSDN博客,责编 | Carol头图 | CSDN 下载自视觉中国一、数据存储类型一般情况下,我们将存储分成了4种类型,基于本机的DAS和网络的NAS存储、SAN存储、对象存储。对象存储是SAN存储和NAS存储结合后的产物,汲取…

给软件工程师、数据科学家和数据工程师的面试指南:该做与不该做

亚马逊这样的公司有 14 项领导原则 。他们不想仅仅雇佣一个数据科学家或软件工程师。对于许多只进行一次或两次面试的面试者来说,这可能没有那么明显,因为你太专注于回答面试的技术部分。但是,在你进行技术面试时,我们希望提供一些…

限制在同一台电脑上只允许有一个用户登录

文章目录1. html 部分2. js部分3. 拦截器部分4. 认证授权部分5. 控制层部分6. 工具类实现流程: 1.从reqest域中获取现在登陆的新sessionId 2.根据登陆的用户名从reqest域中获取已经登陆的老sessionId 3.判断老sessionId是否存在和新旧sessionId是否是否一致 如果一直返回当前用…

FM算法介绍

概述 FM (Factorization Machine) 算法可进行回归和二分类预测,它的特点是考虑了特征之间的相互作用,是一种非线性模型,目前FM算法是推荐领域被验证的效果较好的推荐方案之一,在诸多电商、广告、直播厂商的推荐领域有广泛应用。 …

最新!Vicor 270V-28V DCM5614以96%效率提供1300W功率

近日Vicor 宣布推出隔离式稳压 270V-28V DC-DC 转换器 DCM5614,其采用 5.6 x 1.4 0.3 英寸 VIA™ 封装,额定输出功率为 1300W。据了解DCM5614 重量仅 178g,提供无与伦比的功率密度可达451W/in3 ,支持功率密度、重量和效率都至关重…

JavaScript-jQuery事件

参考文档&#xff1a; https://jquery.cuishifeng.cn/ 事件 鼠标事件&#xff0c;键盘事件&#xff0c;其他事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src&…

58 集团大规模 Storm 任务平滑迁移至 Flink 的秘密

Flink-Storm 是 Flink 官方提供的用于 Flink 兼容 Storm 程序 beta 工具&#xff0c;并且在 Release 1.8 之后去掉相关代码。本文主要讲述 58 实时计算平台如何优化 Flink-Storm 以及基于 Flink-Storm 实现真实场景下大规模 Storm 任务平滑迁移 Flink。 背景 58 实时计算平台…

前后端敏感数据加密方案及实现_01

文章目录一、组成部分1. html2. js3. 拦截器4. 认证授权5. 控制层6. 工具类一、组成部分 1. html <form id"formId" class"layui-form" action"${ctxPath}/login" method"post"><!-- 用户名 --><div class"layu…

离屏渲染在车载导航中的应用

导读 与手机导航不同&#xff0c;高德地图的车机版&#xff08;AMAP AUTO&#xff09;直接面对各大车厂和众多设备商。这些B端用户采用的硬件参数参差不齐&#xff0c;提出的业务需求涉及到渲染中诸多复杂技术的应用&#xff0c;这对渲染性能提出了极高的要求。 最初车机版沿…

打造大数据和AI能力底座 联通大数据深度参与“新基建”

年初至今&#xff0c;国家关于“新基建”的政策持续发布&#xff0c;引起社会各界广泛关注。目前来看&#xff0c;官方定义的新型基础设施主要包括信息基础设施、融合基础设施、创新基础设施三方面内容。疫情过后&#xff0c;新型基础设施建设将承担起经济复苏的使命&#xff0…

技术人如何通过了解业务,获取晋升机会?

伐薪是阿里巴巴高级技术专家&#xff0c;14年初入阿里时&#xff0c;没有过多地思考业务痛点和了解业务策略。后来&#xff0c;经历过晋升&#xff0c;当晋升评委&#xff0c;主动学习业务&#xff0c;最后&#xff0c;完成了从技术专家向综合性 TL 转变。这一路下来&#xff0…

adb-获取包名/界面名、获取app启动时间、卸载app、退出app、查看所有进程、查看所有包名

获取包名/界面名 Mac/Linux&#xff1a; adb shell dumpsys window windows | grep mFocusedApp adb shell dumpsys window windows | grep mCurrentFocus adb shell dumpsys window | grep mCurrentFocusWindows: adb shell dumpsys window windows | findstr mCurrentFoc…

记一次代码重构

单一职责 功能单一 功能单一是SRP最基本要求&#xff0c;也就是你一个类的功能职责要单一&#xff0c;这样内聚性才高。 比如&#xff0c;下面这个参数类&#xff0c;是用来查询网站Buyer信息的&#xff0c;按照SRP&#xff0c;里面就应该放置查询相关的Field就好了。 Data…