使用 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 被引用為 Pipe
的 source
,並定期 (預設為 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
被引用為 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 叢集的事件網格!