跳至内容

使用 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 描述的另一个(外部)系统。

下面是一个使用现成的 Kamelettimer-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 被引用为 Pipesource,并定期(默认值为 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 被引用为 Pipesource,并且在 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 集群的事件网格!

我们使用分析和 Cookie 来了解网站流量。出于此目的,有关您使用我们网站的信息将与 Google 共享。 了解更多。