コンテンツへスキップ

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 によって記述されている) にデータを移動したりできます。

以下は、すぐに使用できる 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 として参照され、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-brokerPipesource として参照され、properties 内では、関心のある CloudEvent type を定義します。一致する CloudEvent が発生すると、イベントは参照された sink にルーティングされます。この例では、受信したデータを標準出力ログに出力するだけのシンプルな log-sink Kamelet を使用しています。

上記が機能するためには、Apache Camel K オペレーターは Pipe データから Knative Trigger を実際に作成します。ここで、spec.brokerdemo-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 クラスターのイベントメッシュとして機能します!

サイトのトラフィックを理解するために、アナリティクスと Cookie を使用しています。サイトの使用に関する情報は、その目的のために Google と共有されます。詳しくはこちら。