使用 Apache Camel K 和 Knative Eventing 进行事件溯源 ¶
发布时间:2024-05-27
使用 Apache Camel K 和 Knative Eventing 进行事件溯源¶
作者:Matthias Weßendorf,Red Hat 高级首席软件工程师
为什么选择 Apache Camel K?¶
Apache Camel 是一个流行的开源集成框架,使您能够快速轻松地集成各种消费或生成数据的系统。通过 Apache Camel K,该项目提供了一个基于 Apache Camel 构建的轻量级集成框架,该框架在 Kubernetes 上原生运行,专门为无服务器和微服务架构而设计。
Camel K 框架还支持 Knative,允许开发人员 绑定 任何 Kamelet 到 Knative 组件。Kamelet 可以充当数据的“来源”,或者作为“接收器”。有几个 Kamelet 可用于集成和连接到第三方服务或产品,例如 Amazon Web Services (AWS)、Google Cloud,甚至传统的 AMQP 1.0 或 JMS 代理(如 Apache Artemis)等消息系统。Kamelet 的完整列表可以在 文档 中找到。
安装¶
Apache Camel K 的 安装 提供了一些选择,例如 CLI、Kustomize、OLM 或 Helm。Helm 安装示例
$ helm repo add camel-k https://apache.github.io/camel-k/charts/
$ helm install my-camel-k camel-k/camel-k
除了 Camel K 之外,我们还需要安装 Knative Eventing,如 文档 中所述。
创建 Knative Broker 实例¶
我们使用 Knative Broker 作为我们系统的核心,充当事件生产者和事件消费者之间的 事件网格
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
namespace: default
name: demo-broker
现在,事件生产者可以向其发送事件,事件消费者可以接收事件。
使用 Kamelets 作为事件源¶
为了将 Kamelet 绑定到 Knative 组件(如上面的代理),我们使用 Pipe
API。Pipe 允许声明性地将 Kamelet 描述的系统中的数据移动到 Knative 目标或从 Knative 目标移动到 Kamelet 描述的另一个(外部)系统。
下面是一个使用现成的 Kamelet
(timer-source
)的 Pipe
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
name: timer-source-pipe
spec:
source:
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1
name: timer-source
properties:
message: Hello Knative Eventing!
sink:
properties:
cloudEventsType: com.corp.my.timer.source
ref:
kind: Broker
apiVersion: eventing.knative.dev/v1
name: demo-broker
timer-source
Kamelet 被引用为 Pipe
的 source
,并定期(默认值为 1000ms
)将其 message
属性的值发送到出站 sink
。在这里,我们使用 Knative Broker,它接受 CloudEvents。消息有效负载到 CloudEvents 格式的转换由 Apache Camel 为我们完成。在 sink
上,我们还可以定义要发送的 CloudEvent 的 type
。
使用 Kamelets 作为事件消费者¶
为了使用 Apache Camel K 从 Knative 代理消费消息,我们需要一个不同的 Pipe
,其中上面的代理充当事件源,Kamelet 用作接收 CloudEvents 的接收器
apiVersion: camel.apache.org/v1
kind: Pipe
metadata:
name: log-sink-pipe
spec:
source:
ref:
kind: Broker
apiVersion: eventing.knative.dev/v1
name: demo-broker
properties:
type: com.corp.my.timer.source
sink:
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1
name: log-sink
demo-broker
被引用为 Pipe
的 source
,并且在 properties
中我们定义了我们感兴趣的 CloudEvent type
。在匹配的 CloudEvent 上,事件将路由到引用的 sink
。在此示例中,我们使用了一个简单的 log-sink
Kamelet,它只会将其标准输出日志上接收到的数据打印出来。
注意
为了使上述内容正常工作,Apache Camel K 运算符实际上将从 Pipe
数据创建 Knative Trigger
,其中 spec.broker
将与我们的 demo-broker
匹配,并且 spec.filter.attributes.types
字段将设置为 com.corp.my.timer.source
,以确保仅转发匹配的 CloudEvent 类型。
结论¶
借助 Apache Camel K,Knative Eventing 生态系统受益于大量预定义的 Kamelet,用于与许多服务和产品集成。可以将事件从 Google Cloud 发送到 AWS。Knative Eventing 充当路由的核心,Knative Broker 和 Trigger API 作为 Kubernetes 集群的事件网格!