跳至內容

使用 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 Broker,例如 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

現在,事件生產者可以將事件傳送到其中,事件消費者可以接收事件。

使用 Kamelet 作為事件來源

為了將 Kamelet 繫結到 Knative 元件(如上述 Broker),我們使用了 Pipe API。Pipe 允許以宣告方式將資料從 Kamelet 描述的系統移至 Knative 目的地, Knative 目的地移至 Kamelet 描述的另一個 (外部) 系統。

以下是一個 Pipe,使用現成的 Kamelet,即 timer-source

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。在這裡,我們使用接受 CloudEvents 的 Knative Broker。訊息酬載到 CloudEvents 格式的轉換由 Apache Camel 為我們完成。在 sink 上,我們還可以定義要傳送的 CloudEvent 的 type

使用 Kamelet 作為事件消費者

為了使用 Apache Camel K 來取用來自 Knative Broker 的訊息,我們需要另一個 Pipe,其中上述 Broker 作為事件的來源,而 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 分享,以用於該目的。瞭解更多資訊。