Data Integration — Debezium リリース
Red Hat Integartion 2020–04 がリリースされ、Debezium が利用可能となりました。Debezium は on OpenShiftと on RHEL で利用できますが、on RHEL は 2020–04 において Tech Preview です。
Debezium でどんなことができるかはこちらをご覧ください。
利用可能な DB は以下の通りです。
- MySQL 5.7/8.0
- PostgreSQL 10/11/12
- SQL Server 2017
- MongoDB 3.6/4.0/4.2
Debezium はデータベースに発生したチェンジイベントを AMQ Streams(Apache Kafka)のトピックに格納し、他のデータソースへ伝播することを可能にします。
Apache Kafka の Connector であるため on OpenShift、on RHEL にかかわらず AMQ Streams を構築しておく必要があります。
Apache Kafka はトピックを複数のパーティションに分割して利用(シャーディング)することができますが、パーティションを分割すると順序が保証されないため、Debezium を利用する場合。トピックのパーティションは 1 にすることを推奨します(※)。
※Apache Kafka にデータをいれる Producer が任意のキーを指定して特定のパーティションに入れるようにすればパーティション内での順序は保証されます。
この点は以下のドキュメントの「2.2. Kafka topic creation recommendations」にある Other topics — single partition にも記載がありますのでご確認ください。
Debezium のユースケースは Tech Preview のときの記事にいくつか記載していますが、再度いくつか例を挙げてみたいと思います。
CDC を利用してデータ指向アプリケーションデザインの適用
上記の「データ指向アプリケーションのデザイン」は最終的にイベントベースのアプリケーションに置き換えるという話をしています。
イベントにはドメインイベントとチェンジイベントがあり、ドメインイベントをアプリケーションに適用しようとすると結構な労力がかかります。そこでまず、チェンジイベントを適用して、つまり Change Data Capture を適用してデータの利用側のモダナイズを計り、最終的にはコマンド(データベースへの INSERT / UPDATE)側をドメインイベントに対応させるというシナリオです。
この辺りの話は以下の記事を読むと助けになるかと思います。
Debezium は Apache Kafka の Connector として開発されているため、Apache Kafka の恩恵を受けることができます。本シナリオの通り、ある一つのデータベースを更新すれば、そのチェンジイベントを利用して複数のデータソースにデータを適用することができます。また、メッセージは(コンパクションがおこなわれない設定にすれば)ストレージが許す限り保存することが可能です。Consumer がメッセージを取得してもトピックからメッセージが消えるということはありません。イベントベースなアプリケーションを構築するにあたってイベントストアとして必要となります。
また、Apache Kafka の分散システムによって高スループット・可用性を保証することができます。
データ仮想化と組み合わせたケース
既存のデータベースに手をいれずにドメイン駆動設計の概念を適用することができます。
- 既存のデータベースにおけるデータをドメインモデルに適した形で仮想データベースを作成 — Data Virtualization
- 読み込みに適したモデルへ仮想 DB を作成 — Data Virtualization
- Command は仮想 DB に対して書き込み
- データベースのチェンジイベントをインメモリキャッシュへ反映 — Debezium
- 仮想 DB から Query が読み込み
最後に
CDC が Tech Preview のときにはデータのレプリケーションなどもユースケースとして挙げていましたが、現時点で利用可能な DB で現実的に使えるのは SQL Server 2017 でしょうか。
将来的には使用できるデータベースも増えそうなので期待していただければと思います。