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 はデータの「ソース」として、または「シンク」として機能できます。Amazon Web Services (AWS)、Google Cloud、または Apache Artemis のような従来のメッセージシステム (AMQP 1.0 や JMS ブローカーなど) に統合および接続するための Kamelet がいくつか用意されています。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 ブローカーインスタンスの作成¶
イベントプロデューサーとイベントコンシューマーの両方のイベントメッシュとして機能する、システムの中核として Knative ブローカーを使用しています。
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
namespace: default
name: demo-broker
これで、イベントプロデューサーはイベントを送信でき、イベントコンシューマーはイベントを受信できます。
イベントソースとしての Kamelet の使用¶
上記のブローカーのような Knative コンポーネントに Kamelet をバインドするために、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
として参照され、message
プロパティの値を定期的に (デフォルトは 1000ms
) アウトバウンドの sink
に送信します。ここでは、CloudEvents を受け入れる Knative ブローカーを使用しています。メッセージペイロードから CloudEvents 形式への変換は、Apache Camel によって自動的に行われます。sink
では、送信する CloudEvent の type
を定義することもできます。
イベントコンシューマーとしての Kamelet の使用¶
Apache Camel K を使用して Knative ブローカーからメッセージを消費するには、上記のブローカーがイベントのソースとして機能し、Kamelet が CloudEvents を受信するためのシンクとして使用される、別の Pipe
が必要です。
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 ブローカーと Trigger API は Kubernetes クラスターのイベントメッシュとして機能します!