KEMBAR78
Apache EventMesh を使ってみた | PDF
Apache EventMesh
を使ってみた
株式会社クリエーションライン / イベントドリブン Meetup 第 1 回
佐伯嘉康 / @laclefyoshi
1
自己紹介 / 佐伯嘉康 / SAEKI Yoshiyasu
● Yahoo! Japan 在籍時から、ストリーミング処理フレームワークに興味を
持ち、Apache Kafka や Apache Storm、Apache Spark 等の知見を
持つ
● リクルート在籍時データ ETL・分析基盤の開発
○ GCP イベントにて発表(2020-03; COVID-19 前最後の登壇..)
○ https://speakerdeck.com/rtechkouhou/gcpdegou-zhu-suru-korekarafalsebian-
hua-nidui-ying-chu-lai-rudetafen-xi-ji-pan-falsezuo-rifang
● 今日が COVID-19 後最初の勉強会登壇です(3 年ぶり!)
2
目次 / 話すこと
● イベントドリブン
● イベントメッシュ
● Apache EventMesh
● まとめ
3
Ice break: オライリーの Twitter 懸賞
● Twitter のオライリー・ジャパンのアカウント:
@oreilly_japan
● 時々新刊の懸賞をやっている
○ 応募はリツイートするだけなので楽
○ たいてい 3 名当選なので倍率は高い
○ 期限があるのでハズれたかが分かる
4
Ice break: オライリーの Twitter 懸賞
● 「マイクロサービスアーキテクチャ 第 2 版」当選!
5
イベントドリブン(駆動)
● 「マイクロサービスアーキテクチャ 第 2 版」
○ P.113-121
○ 4.8 パターン: イベント駆動通信
あるマイクロサービスが、他のマイクロサービスに何らかの処理を求めるのではなく、イベントを
発行します。他の複数のマイクロサービスが、そのイベントを受信する場合もあれば、受信しな
い場合もあります。複数のイベントリスナは、それぞれ独自のスレッド上で実行されるので、これ
は本質的に非同期の対話になります。
6
イベントドリブンのアーキテクチャ
● Publisher(Producer): パブリッシャ
● Subscriber(Consumer): サブスクライバ
● Broker: ブローカ
● Event → Message
Publisher Subscriber
Broker
Storage
M
Event
E S S A G E
7
イベントドリブンのメリット / デメリット
● メリット
○ 情報をブロードキャストする場合
○ 限りなく疎結合
○ スケーラブル
● デメリット
○ イベントドリブンでない場合に比べて複雑になりがち
○ イベントドリブン ↔ リクエスト・レスポンス(同期)
○ すべてをイベントドリブンで解決できないかもしれない
8
導入(余談): XXメッシュ
流行ってます
意味合いとしては..
各部品は独立して動き(各自で責任を持ち)、
それら部品を組み合わせて使う際にインフラ層/通信層を設置し、
接続・監視・制御を柔軟に行うためのアーキテクチャ
Service Mesh
SQLMesh
Data Mesh
9
イベントドリブンにおけるイベントメッシュ
● イベントドリブンはもともと、イベント発行側と受信側が独立して動いている
○ そのアーキテクチャを支えるのがブローカ
○ イベント発行側と受信側がブローカの存在を認識する必要
■ もっと独立しながら連携するために足りないものは何か
● ブローカ同士を接続し、より組み合わせを柔軟にする
○ XXメッシュの定義にならい、接続・監視・制御を容易にする
10
イベントドリブンにおけるイベントメッシュ
● イベントメッシュにより、イベント発行側と受信側がブローカーの
位置を意識する必要がなくなる
○ あるイベント発行は [ブローカ A] 宛に実施されている
○ 受信側は [ブローカ B] からイベントを購読している
○ イベントメッシュにより [ブローカ A] と [ブローカ B] を繋ぐ
■ 単純にミラーリングするのではなく、ルーティングするイベントを
条件制御できると良い
11
イベントドリブンにおけるイベントメッシュ
12
Publisher Subscriber
Broker
A
Broker
B
Subscriber
イベントドリブンにおけるイベントメッシュ
● 実装としてはいくつか
○ Solace Event Mesh
○ SAP Event Mesh
○ Knative Event Mesh
○ Apache EventMesh
13
Apache EventMesh
https://eventmesh.apache.org/
● ブローカ機能
● ブローカ同士を繋ぐ機能(Source/Sink Connector)
● サーバレスワークフロー(イベント処理)機能
● セキュリティ、監視、メトリック、etc.
14
Apache EventMesh に関する情報
● Born at China’s WeBank, now incubating in the ASF:
Introducing Apache EventMesh(2021-06-29)
○ https://thestack.technology/apache-event-mesh/
● EventMesh: Event-Driven Distributed Application Runtime
(2021-08-07)
○ https://apachecon.com/acasia2021/sessions/1154.html
● THE APACHE SOFTWARE FOUNDATION ANNOUNCES NEW
TOP-LEVEL PROJECT APACHE® EVENTMESH(2023-03-23)
○ https://news.apache.org/foundation/entry/the-apache-software-foundation-an
nounces-new-top-level-project-apache-eventmesh
15
Apache EventMesh / ブローカー
● メッセージの伝達・保管を担う
● CloudEvents 仕様に準拠した API
○ CNCF によって策定されているクラウドネイティブ環境における標準
のメッセージのやり取りのための仕様
○ + CloudEvents Bindings for other messaging protocols
● その他のインタフェースに gRPC、HTTP
16
Apache EventMesh / 繋ぐ
● Connector
○ Source はメッセージを Apache EvenetMesh が取り出す所
○ Sink はメッセージを Apache EventMesh が送る所
● Apache Kafka や Apache Pulsar、Redis 等他のブローカ実装
● RDB(with JDBC)
● その他(Web)サービスとの連携も実装次第では可能
17
Apache EventMesh / イベントメッシュ
18
Publisher Subscriber
Broker
A
Broker
B
Subscriber
Apache EventMesh / イベントメッシュ
19
Broker
Apache Kafka
Publisher Subscriber
Broker
Apache Pulsar Subscriber
Apache EventMesh / サーバレスワークフロー
● AsyncAPI で定義した内容を元に Publisher/Subscriber を生成
● 内蔵している CNCF Serverless Workflow で上記定義に従ったメッ
セージの伝達を実行する
20
Apache EventMesh / その他機能
● セキュリティ
○ パスワード、ACL 等
● 監視
○ トレーシング(Tracing): Jaeger、Zipkin 等と連携
● メトリック
○ Prometheus 等と連携
● ストレージ(EventStore? Sink Connector とは別)
○ Sink Connector はビジネスロジックを組み込めるが、ストレージは
書き出すだけ 21
Apache EventMesh / 開発状況
● 最新版は v 1.8.0(2023-01-28 リリース)
○ https://eventmesh.apache.org/download
○ incubating 抜けてからのリリースはまだ
● Docker Hub には v 1.4.0 まである(1 年前のバージョン..)
○ https://hub.docker.com/r/eventmesh/eventmesh/tags
22
Apache EventMesh / 使ってみた
● Getting Started が雑です..
○ https://eventmesh.apache.org/docs/instruction/runtime
○ 例: “64-bit JDK 1.8+;” って書いてありますが、
正確には 1.8.x の意味です(1.9 とかでコンパイルできません)
○ 例: eventmesh.properties に何書けばいいの..
■ 答: 例 eventMesh.server.http.port=10105
eventMesh.server.tcp.port=10000
eventMesh.server.grpc.port=10205
eventMesh.server.idc=DEFAULT
eventMesh.server.env=DEV
eventMesh.server.cluster=COMMON
eventMesh.server.name=EVENTMESH-runtime
eventMesh.sysid=0000
eventMesh.connector.plugin.type=standalone
eventMesh.security.plugin.type=acl
eventMesh.registry.plugin.type=etcd
eventMesh.trace.plugin=jaeger 23
Apache EventMesh / 使ってみた
● ノウハウ: とりあえず起動スクリプト等を頼りに動かしてみて、起動失敗し
たときに出るスタックトレースから、ソースコードを読んで必要な設定を追
加する
● 結果 ↓
eventmesh/eventmesh:v1.4.0 0.0.0.0:10000->10000/tcp, :::10000->10000/tcp,
0.0.0.0:10105->10105/tcp, :::10105->10105/tcp
rocketmqinc/rocketmq-broker:4.5.0-alpine 0.0.0.0:10909->10909/tcp, :::10909->10909/tcp,
0.0.0.0:10911->10911/tcp, :::10911->10911/tcp, 10912/tcp
rocketmqinc/rocketmq-namesrv:4.5.0-alpine 0.0.0.0:9876->9876/tcp, :::9876->9876/tcp
24
Apache EventMesh / 使ってみた
● Github リポジトリに eventmesh-examples があり、そこに
Publisher/Subscriber の実装がある
○ https://github.com/apache/eventmesh/tree/master/event
mesh-examples
○ gRPC、HTTP 等
● 結果: (省略。こんな感じの出力が出れば成功です)
25
(response={"retCode":0,"retMsg":"successSendResult[topic=TEST-TOPIC-HTTP-ASYNC,
messageId=67]","resTime":1673871722530})
Apache EventMesh
26
https://eventmesh.apache.org/
まとめ
● イベントドリブン
○ イベントのやり取りを軸にした疎結合アーキテクチャ
● イベントメッシュ
○ コンポーネントを接続しイベントをルーティングする
● Apache EventMesh
○ 主要なコンポーネントを押さえ、デザインはイケている
○ もうちょっとドキュメント頑張って(ここで言ってもしょうがない)
27

Apache EventMesh を使ってみた