$30 off During Our Annual Pro Sale. View Details »

Using Change Data Capture for Stack Modernization

kamorisan
September 26, 2022

Using Change Data Capture for Stack Modernization

kamorisan

September 26, 2022
Tweet

More Decks by kamorisan

Other Decks in Technology

Transcript

  1. 1 Solution Pattern: Using Change Data Capture for Stack Modernization

    レッドハット株式会社 テクニカルセールス本部 1
  2. Change Data Capture(CDC)とは? 2

  3. V0000000 チェンジデータキャプチャ (CDC) とは? 3 DATA INTEGRATION ▸ ソフトウェアのデザインパターンとして確立したパターン ▸

    データソースをモニタリングしてその変更をキャプチャし、他のシステムでの その変更への対応が可能 ▸ CDCはデータベースのテーブルの行レベルでの変更をキャプチャし、対応する 変更イベントをデータストリーミングバスに渡す ▸ アプリケーションはそれらの変更イベントのストリームを読み込み、その発生 順序に応じて変更イベントへのアクセスが可能
  4. V0000000 チェンジデータキャプチャ (CDC) とは? 4 ソース データベース データベース内のデータやスキーマの変更をイベントストリームとして取得 し、ターゲットシステムにニアリアルタイムで変更を反映 Apache

    Kafka ? E E E E E E E Offset 0 Offset 1 Offset 2 Offset 3 Offset 4 Offset 5 Offset 6 Offset 7 Topic DATA INTEGRATION ターゲット システム
  5. V0000000 5 データのレプリケーション データを他のデータベースに複製 分析システム、データレイク、DWHなどへのフィード 他のチーム/組織へのデータフィード マイクロサービス マイクロサービスアーキテクチャとの高い親和性: サービス間でのデータの伝播を密結合にならずに実現 各サービスではそれぞれに最適化されたビューを保持

    その他のユースケース 監査 / データ履歴 キャッシュの更新/無効化 全文検索でのデータの更新 CQRSにおける読み取りモデルの更新 DATA INTEGRATION チェンジデータキャプチャのユースケース
  6. CONFIDENTIAL designator V0000000 6 ビジネス/ITニーズ ▸ 最新技術を取り入れたり、作り直す必要の 無いレガシーシステムのデータの活用 ▸ レガシーシステムやモノリスへの影響を

    最小限に抑えつつ、新機能を追加したい ▸ バッチではなくリアルタイムなデータ連携 ▸ クラウドネイティブな最新の アーキテクチャにしてアジリティを実現 Use Cases レガシーシステムのデータ活用 現行システムではオンプレにあるレガシーシステムとクラウド上のマイクロサービス間の連携が課題 レガシーDB Monoliths COTS products データセンター 新データソース クラウド Microservices As Is
  7. CONFIDENTIAL designator V0000000 7 Use Cases レガシーシステムのデータ活用 Change Data Capture

    Microservices レガシー DB Monoliths COTS products データセンター 新データソース クラウド 効果 ▸ オンプレのレガシーシステムで更新さ れたデータを、クラウドへのリアルタ イムなデータ連携を実現 ▸ OpenShift Streams for Apache Kafkaによりクラウド上でデータスト リーミングを実現 ▸ Debeziumでクラウドとデータセン ターを接続 ▸ Service Registryによりデータモデ ルのスキーマ検証と互換性強化 ソリューション: Change Data CaptureとマネージドのKafkaによる分散システム間でのデータ連携 To Be
  8. Using Change Data Capture for Stack Modernization のデモについて 8

  9. CONFIDENTIAL designator V0000000 9 Solution Pattern: Using Change Data Capture

    for Stack Modernization Using Change Data Capture for Stack Modernization: Demo
  10. CONFIDENTIAL designator V0000000 10 Using Change Data Capture for Stack

    Modernization: Demo 1.ローカル環境のセットアップ 事前準備(1/2) • OpenShift CLI (oc client) ◦ CLI ツールがあるかどうかを確認するには、ターミナルを開いて次のコマンドを使用します。 ▪ oc version ◦ OpenShift CLI のインストールについては、こちらのガイド を参考にしてください。 • Helm CLI ◦ CLI ツールがあるかどうかを確認するには、ターミナルを開いて次のコマンドを使用します。 ▪ helm version ◦ Helm CLI のインストールについては、こちらのガイド を参考にしてください。
  11. CONFIDENTIAL designator V0000000 11 Using Change Data Capture for Stack

    Modernization: Demo 1.ローカル環境のセットアップ 事前準備(2/3) • Ansible CLI (v2.9) ◦ CLI ツールがあるかどうかを確認するには、ターミナルを開いて次のコマンドを使用します。 ▪ ansible --version ansible-galaxy --version ◦ ansible galaxy collectionのリストを確認し、Ansible kubernetes.core module があることを 確認してください。 ▪ ansible-galaxy collection list ◦ リストにない場合は、次のコマンドでインストールをすることができます。 ▪ ansible-galaxy collection install kubernetes.core ◦ Ansible CLI のインストールについては、こちらのガイド を参考にしてください。
  12. CONFIDENTIAL designator V0000000 12 Using Change Data Capture for Stack

    Modernization: Demo 1.ローカル環境のセットアップ 事前準備(3/3) • RHOAS CLI ◦ CLI ツールを使用してターミナルから作業を行う場合は、RHOAS CLIが必要になります。 またWeb Consoleを介して、OpenShift Streams Managed Service (kafka) とのやり取りを 行うこともできます。 この後の手順ではCLIを使用していますので、必ずインストールをしておいてください。 ◦ CLI ツールがあるかどうかを確認するには、ターミナルを開いて次のコマンドを使用します。 ▪ rhoas version ◦ RHOAS CLI のインストールについては、こちらのガイド を参考にしてください。
  13. CONFIDENTIAL designator V0000000 13 Using Change Data Capture for Stack

    Modernization: Demo 2.デモ環境の準備 • cluster-admin 権限を持つ OpenShift cluster (version 4.9以上) ◦ RHPDS もしくは、OpenTLCにアクセスできる場合は、 環境を払い出すことができます。 ▪ RHPDS: Services -> Catalogs -> Openshift Workshop OpenShift 4.x workshop (4.10など) ▪ OpenTLC: Services -> Catalogs -> OpenTLC Openshift 4 Labs Hands On with OpenShift 4.x (4.10など)
  14. CONFIDENTIAL designator V0000000 14 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(1/9) • 無料で48時間使用できる開発向けのサービスを利用することができます。 • https://console.redhat.com に、Red Hat アカウント IDでログインします。 • サービスアカウントの準備 ◦ 左メニューの “Application and Data Services” をクリックします。 ◦ 左メニューの “Services Account” をクリックします。 ◦ Create service account をクリックします。
  15. CONFIDENTIAL designator V0000000 15 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(2/9) • サービスアカウントの準備(続き) ◦ 適当なアカウント名を入力して Create をクリックします。 ◦ 成功すると、クライアントIDとsecretが表示されます。 後で使いますので、テキストファイルなどにコピーしておいてください。 ◦ 確認のチェックを入れ、Closeします。
  16. CONFIDENTIAL designator V0000000 16 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(3/9) • Kafka インスタンスの作成 ◦ 左メニューの “Application and Data Services” をクリックします。 ◦ 左メニューの “Streams for Apache Kafka” -> ”kafka Instance” を クリックします。 ◦ Create kafka instance をクリックします。
  17. CONFIDENTIAL designator V0000000 17 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(4/9) • Kafka インスタンスの作成(続き) ◦ Name欄にインスタンス名を入力します。 ◦ 他はそのままで良いので、Create instance をクリックしてください。
  18. CONFIDENTIAL designator V0000000 18 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(5/9) • Kafka インスタンスの作成(続き) ◦ インスタンスができたら、リストから作成したインスタンスの右側のメ ニューをクリックし、Connection -> Bootstrap server の値をテキスト ファイルなどにコピーしておいてください。
  19. CONFIDENTIAL designator V0000000 19 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(6/9) • サービスアカウントのACL(Access Control Lists)の設定 ◦ ローカルのターミナルから、以下のコマンドを入力してRHOAS(Red Hat OpenShift Streams for Apache Kafka)にログインをします。 ※ブラウザが開くのでRed Hat アカウント IDでログインしてください。 ▪ rhoas login ▪ ログインが成功すると、以下のような画面がブラウザで開きます。 ▪ ブラウザが開かない場合は、ターミナルにURLが表示されるのを 待って、そちらのURLからアクセスをしてください。
  20. CONFIDENTIAL designator V0000000 20 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(7/9) • サービスアカウントのACL(Access Control Lists)の設定 ◦ 事前に準備をしておいたOpenShift環境に、ローカルのターミナルから ログインをしておきます。 <username>、<password>、<server> の部分は、あなたの環境の値で 置き換えてください。 ▪ oc login -u <username> -p <password> -s <server> ◦ ローカルのターミナルから、以下のコマンドを順に入力してください。 <ClientID> の部分は、先ほどメモしたサービスアカウントのクライアント IDで置き換えてください。 rhoas kafka list ⇦kafka instanceのリストが表示されます。 rhoas kafka use ⇦先ほど作成したkafka instanceを選択してください。 rhoas kafka acl grant-access --producer --consumer --service-account <ClientID> --topic all --group all -y
  21. CONFIDENTIAL designator V0000000 21 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(8/9) • トピックの作成(1/2) ◦ 6つのトピックを、1つのパーティションで作成をします。 ◦ ローカルのターミナルから、以下のコマンドを順に入力してください。 ▪ rhoas kafka topic create --name=retail.sale-aggregated --partitions=1 rhoas kafka topic create --name=retail.updates.public.customer --partitions=1 rhoas kafka topic create --name=retail.updates.public.product --partitions=1 rhoas kafka topic create --name=retail.updates.public.sale --partitions=1 rhoas kafka topic create --name=retail.updates.public.line_item --partitions=1 rhoas kafka topic create --name=retail.expense-event --partitions=1
  22. CONFIDENTIAL designator V0000000 22 Using Change Data Capture for Stack

    Modernization: Demo 3.OpenShift Streams for Apache Kafka の準備(9/9) • トピックの作成(2/2) ◦ https://console.redhat.com に戻り、左メニューの “Streams for Apache Kafka” -> ”kafka Instance” をクリックします。 ◦ 作成したインスタンスをクリックし、トピックのタブに移動して、 6つのトピックが作成されていることを確認してください。
  23. CONFIDENTIAL designator V0000000 23 Using Change Data Capture for Stack

    Modernization: Demo 4.デモのプロビジョニング(1/2) • リポジトリのクローンとプロビジョニング準備 ◦ こちらから、ローカル環境にダウンロードしてください。 ▪ git clone https://github.com/solution-pattern-cdc/ansible.git ◦ ansibleフォルダに入り、inventory.templateを複製してください。 ▪ cd ansible cp inventories/inventory.template inventories/inventory ◦ inventories/inventory ファイルを開き、必要事項を追記します。 ▪ [all:vars] application_namespace=retail # OpenShift Streams for Apache Kafka rhosak_bootstrap_server= <your bootstrap server> rhosak_service_account_client_id=<your client ID> rhosak_service_account_client_secret=<your client secret> # replication factor for topics. Should not exceed the number of brokers. For Streams for Apache Kafka trial instances the number of brokers is 1. rhosak_replication_factor=1 # Helm helm_repo_name=retail-cdc helm_repo_url=https://solution-pattern-cdc.github.io/helm # Kafdrop kafdrop_image=obsidiandynamics/kafdrop:latest default_page_size=15 メモしておいたサービスアカウントのクライアントID、secret Kafkaインスタンスのbootstrap serverを追記します。
  24. CONFIDENTIAL designator V0000000 24 Using Change Data Capture for Stack

    Modernization: Demo 4.デモのプロビジョニング(2/2) • デモのプロビジョニング ◦ ansible playbook を実行して、デモをプロビジョニングします。 ▪ ansible-playbook -i inventories/inventory playbooks/install.yml ◦ Playbook が正常に完了すると、retail という namespaceが作成され、 そこにデモのリソースがインストールされています。
  25. CONFIDENTIAL designator V0000000 25 Using Change Data Capture for Stack

    Modernization: Demo 5.デモの内容について(1/14) • デモのシナリオ ◦ とある観葉植物専門の小売店は、オンライン市場への進出により 市場を拡大したいと考えています。 ◦ そのためには、現在稼働中の既存アプリケーションに影響を与えることなく、 新しい機能を導入する必要があります。 ◦ 売上、顧客、商品に関する情報はすべてレガシーアプリケーションで 管理されていますが、このデータは新しい機能でも必要とされています。 ◦ 今回、2つの新機能が導入をされました。 ▪ 製品の検索機能の強化 ▪ 顧客へのキャッシュバックシステム ◦ どちらもイベント駆動アーキテクチャ(EDA)の上に構築されています。 すべてのサービスがオーケストレーションと統合されており、 関連するイベントが公開されると、それぞれが独立してオペレーションをします。
  26. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(2/14) • 製品の検索機能の強化 ◦ search service で、ElasticSearchのインデックスに登録されている既存の データを見ることができます。 ▪ OpenShift Console の左メニュー: Networking -> Routes -> search-service の Location の URLをクリックしてください。 26
  27. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(3/14) • 製品の検索機能の強化 ◦ search service で、ElasticSearchのインデックスに登録されている既存の データを見ることができます。 ▪ 製品DBにはデモの初期状態で1000種類登録がされています。 ▪ 例えば、検索欄に ”yellow” と入力してみると、結果がいくつか表示されます。 ▪ 次に、”kopi” や “java” と入力してみてください。何も表示はされませんでした。 27
  28. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(4/14) • 製品の検索機能の強化 ◦ retail DB(レガシーアプリケーション)に直接新商品を追加し、 検索サービスの挙動を確認してみましょう。 ▪ retail-db コンテナ内の console を使う場合は、 OpenShift Console から、Workloads -> Pods -> retail-db-XXXX -> Terminal ▪ ローカル環境のターミナルを使う場合は、以下のコマンドを入力します。 • oc project retail oc rsh deployment/retail-db ▪ 以下のコマンドで retail データベースの product テーブルにアクセスします • psql \c retail \d product 28
  29. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(5/14) • 製品の検索機能の強化 ◦ retail DB(レガシーアプリケーション)に直接新商品を追加し、 検索サービスの挙動を確認してみましょう。 ▪ 以下のコマンドで、product テーブルに新しい商品の ”Kopi luwak” を追加してみます。 • insert into public.product (product_id, name, price, description) values (7777, 'Kopi luwak', 20, 'Kopi luwak is a coffee that consists of partially digested coffee cherries, which have been eaten and defecated by the Asian palm civet (Paradoxurus hermaphroditus). It is produced mainly on the Indonesian islands of Sumatra, Java, Bali, Sulawesi, and in East Timor.'); 29
  30. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(6/14) • 製品の検索機能の強化 ◦ 追加した新商品が search service に表示されることを確認します。 ▪ 再び、search service の検索欄に、”kopi” もしくは “java” と入力をしてみます。 ▪ 先ほどデータベースに追加した内容が表示されるようになりました。 30
  31. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(7/14) • 製品の検索機能の強化 ◦ データ同期を実施するために送信されたイベントを確認します。 ▪ OpenShift Console の左メニュー: Networking -> Routes -> kafdrop の Location の URLをクリックしてください。 ▪ 下の方にスクロールして、retail.updates.public.product のトピックの 中身を確認してください。 31
  32. CONFIDENTIAL designator V0000000 32 Using Change Data Capture for Stack

    Modernization: Demo 5.デモの内容について(8/14) • 製品の検索機能の強化 ◦ 処理の流れは以下のようになっています。 小売店の在庫や売上を 管理するための レガシーアプリケーション ビジネスプロセスのデータを 保持するために使用します データベース更新イベントを キャプチャして公開します • kafka トピックの管理 • メッセージの受信と保存 • コンシューマーがイベントの 読出しをできるようにする 製品データの更新分を、 elasticsearchの インデックスに追加します データをインデックス化し、 全文検索の機能を強化します REST APIを通して 製品の検索を実施します : OpenShift上に構築 : Managed Serviceで利用
  33. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(9/14) • 顧客へのキャッシュバックシステム ◦ cashback-service-ui で、キャッシュバック ウォレットと そのデータのリストを確認することができます。 ▪ OpenShift Console の左メニュー: Networking -> Routes -> cashback-service-ui の Location の URLをクリックしてください。 ▪ リストにはまだキャッシュバックのデータが無いため、顧客が製品を購入することを シミュレーションしてみます。 33
  34. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(10/14) • 顧客へのキャッシュバックシステム ◦ 顧客が製品を購入することをシミュレーションする ▪ OpenShift Console の左メニュー: Networking -> Routes -> retail-sumilation の Location の URLに、”/q/swagger-ui/” を末尾につけてアクセスをします。 34
  35. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(11/14) • 顧客へのキャッシュバックシステム ◦ 顧客が製品を購入することをシミュレーションする ▪ “try it out” をクリックし、”customer”:1000, “count”:5 と入力して、リクエストを送信 します。選択した顧客に対し、5つの製品の購入イベントが生成されます。 35
  36. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(12/14) • 顧客へのキャッシュバックシステム ◦ キャッシュバックウォレットの顧客データを確認する ▪ ID: 1000 の顧客のデータを確認します。 ▪ 5件の注文の合計金額と、キャッシュバック金額のデータが表示されているはずです。 36
  37. CONFIDENTIAL designator V0000000 Using Change Data Capture for Stack Modernization:

    Demo 5.デモの内容について(13/14) • 顧客へのキャッシュバックシステム ◦ データ同期を実施するために送信されたイベントを確認します。 ▪ OpenShift Console の左メニュー: Networking -> Routes -> kafdrop の Location の URLをクリックしてください。 ▪ 下の方にスクロールして、retail.updates.public.sale, line_item, sale-aggregatedの 3つのトピックの中身を確認してください。 37
  38. CONFIDENTIAL designator V0000000 38 Using Change Data Capture for Stack

    Modernization: Demo 5.デモの内容について(14/14) • 顧客へのキャッシュバックシステム ◦ 処理の流れは以下のようになっています。 顧客の注文や商品の売上を扱うレ ガシーアプリケーションの シミュレーションです ビジネスプロセスのデータを 保持するために使用します データベース更新イベントを キャプチャして公開します Kafkaトピックの表示やコン シューマーグループの閲覧を 行う開発用のWEB UIです。 • kafka トピックの管理 • メッセージの受信と保存 • コンシューマーがイベントの 読出しをできるようにする 顧客データと経費データの集計、 キャッシュバックデータベースへの 永続化のための変換 顧客/経費/キャッシュバック 関連のデータを保持します キャッシュバックの報酬を更新する ために、経費イベントに反応します 販売情報データに情報を付加します。 イベントデータストリーミングに基づ き、新たな情報を加工・追加します。 キャッシュバックデータを消費・管理 するためのREST APIを提供します。 外部サービスとのインテグレーション を行うイベント駆動型の機能です。 : OpenShift上に構築 : Managed Serviceで利用
  39. Debeziumについて 39

  40. V0000000 DATA INTEGRATION Debezium 40 チェンジデータキャプチャのための基盤 • 様々なデータベースのCDCに対応 ◦ トランザクションログをベース

    ◦ スナップショットの取得, フィルタリング機能など • オープンソース, 非常に活発なコミュニティ • 多数の企業で本番稼働 (e.g. WePay, JW Player, Convoy, Trivago, OYO, BlaBlaCar etc.)
  41. CHANGE DATA CAPTURE Debezium ユーザー企業 41 https://debezium.io/community/users/

  42. V0000000 CHANGE DATA CAPTURE DebeziumによるCDCアーキテクチャの全体像 42 Debezium Sourceコネクタが データベースの変更イベントを キャプチャし、Kafkaにレコー

    ドに関するデータを送信 SinkコネクタがKafkaからレ コードを取り出し、他のシステ ムに送信 AMQ Streams DebeziumとAMQ StreamsによるCDCの実現方式
  43. V0000000 • Debezium Serverでは、Amazon Kinesis, Google Cloud Pub/Sub, Apache Pulsar,

    Redisなどにチェンジイベントを送信可能 • Red Hat製品としては提供しておらず、Debezium コミュニティプロジェクトで “Incubating” の状態 CHANGE DATA CAPTURE 【補足】Debezium Server 43 Debeziumの別のデプロイ方式
  44. V0000000 CHANGE DATA CAPTURE クエリベース vs ログベース チェンジデータキャプチャ 44 クエリベース

    ログベース すべての変更をキャプチャ - ポーリングの遅延とオーバーヘッド - アプリケーション・モデルの記述がシ ンプルに - DELETEイベントや古い状態のレコー ドをキャプチャ - インストールと設定の容易さ - 2つのCDCのアプローチの違い
  45. V0000000 CHANGE DATA CAPTURE Debeziumコネクタ 45 Source • General Availability

    ◦ MySQL ◦ Postgres ◦ MongoDB ◦ SQL Server ◦ DB2 (Linux only) • Tech Preview: ◦ Oracle (LogMinerを使用) サポートしているデータベース
  46. V0000000 CHANGE DATA CAPTURE Debezium 46 チェンジイベントの構造 • Key: テーブルのプライマリキー

    • Value: チェンジイベントの詳細 ◦ Before の状態, ◦ After の状態, ◦ ソースに関する情報 • シリアライズのフォーマット: ◦ JSON ◦ Avro • クラウドイベントコンバーター (Tech Preview) ◦ MongoDB, MySQL, PostgreSQL, SQL Serverのコネクタでは、 CloudEvents仕様に準拠したフォーマットで変更イベントを送信可能 INSERTイベントの例
  47. V0000000 CHANGE DATA CAPTURE 47 Kafkaのエコシステム • Kafka Core ◦

    Broker ◦ Management tools • Kafka Connect • Kafka Streams API • Mirror Maker 2 • REST Proxy for bridging HTTP • Schema Registry • Debezium • Apache Camel-K connectors Schema Registry Streaming API REST Proxy Change Data Capture Mirror Maker Connect
  48. CHANGE DATA CAPTURE 48 Apache Camel K: Kameletバインディングによる接続 Kameletバインディングにより、自社プラットフォームと様々な サービスとの接続を容易に実現可能

    Kafka client Kafka app Kafka app Kafka client Source
  49. データパイプライン 49 CHANGE DATA CAPTURE Source Event Capture Apache Kafka

    Kafka Streams API ソース システム Kafka Connect + Debezium Real Time Decisioning (DM) イベント 永続化 ストレージ ターゲット システム Camel K ストレージ / DBのイベント Camel K Producer API Kafka Connect Consumer API Reactive Applications (Quarkus) Reactive Applications (Quarkus) Event-driven APIs SaaS
  50. V0000000 CHANGE DATA CAPTURE Red Hat AMQ Streams : OpenShift

    上で動作するApache Kafka 50 Cloud Native Apache Kafka Source: • 提供されるもの: ◦ Apache Kafka、Kafka Connect、Zookeeper、MirroMaker のコンテナイメージ ◦ Apache Kafka クラスタ、トピック、ユーザーを管理/設定するための Kubernetes Operator ◦ Kafka コンシューマ、プロデューサ、管理クライアント、Kafka Streams • Upstream Community: Strimzi
  51. V0000000 CHANGE DATA CAPTURE DebeziumやKafka ConnectもOpenShift 上で動作 51 Operatorにより環境構築と運用の複雑さを削減 Source:

    • Kafka Connect クラスタ、トピックなどの設 定情報をYAMLベースのCustom Resource Definition で定義 • Operator が設定を適用 • 利点 ◦ デプロイとスケールの自動化 ◦ アップグレードの簡素化 ◦ クラウド間のポータビリティ
  52. V0000000 CHANGE DATA CAPTURE 単一メッセージ変換 (SMTs) 52 DebeziumではKafka Connect APIを使用してKafkaにイベント送信前にイベントの変更が可能

    Image Source: “Penknife, Swiss Army Knife” by Emilian Robert Vicol , used under CC BY 2.0 • 適用したい変換処理をKafka Connectのプロパティとして設定 ◦ タイムスタンプなどのフォーマット変換 ◦ メッセージのフィルタリング ◦ 指定したトピックへのルーティング ◦ 分割されたテーブルを集約して1つのトピックにルーティング ◦ 既存のコンシューマとの互換性を保持 ◦ Sinkコネクタとの互換性のためのメッセージの抽出 ◦ Outboxパターンのサポートしてメッセージを変換 ◦ etc.
  53. V0000000 CHANGE DATA CAPTURE Debeziumの監視とロギング 53 • 監視 ◦ Debeziumを監視するには、Apache

    Kafka、Kafka Connect、Apache Zookeeperで提供されるJMXメトリクスを使 用可能 ◦ Debeziumの各コネクタもコネクタの処理に 関するメトリクスをMBeanで取得可能 ◦ OpenShift環境ではJMXメトリクスを監視す るためにPrometheusとGrafanaを利用可能 • ロギング ◦ Debezium (Kafka, Kafka Connect, Zookeeper含めて) では、ロギングのために log4jを使用
  54. V0000000 CHANGE DATA CAPTURE Debeziumの高可用性の実現方式 54 Kafka Connectでは高可用性の要件にも対応 • Kafka

    Connectの機能を利用したKafka Connectインスタンスのフェイルオーバー ◦ 障害発生時にコネクターに障害が発生 した際、Kafka Connect Clusterが別 のKafka Connectインスタンスでフェ イルオーバーを実現 • OpenShiftのオートヒーリングによるPod の再起動
  55. V0000000 CHANGE DATA CAPTURE Debeziumの設定に関する考慮事項 55 システムリソース (CPU/メモリ) と性能に影響を与える要素 •

    基本は “データベース:Debeziumコネクタ:Kafka Connect = 1:1:1” ◦ Kafka ConnectとDebeziumコネクタでそれぞれ個別の設定が柔軟に可能 • フィルターするテーブル/カラムの数 • エンコーディング (JSON/Avro) • メッセージ変換機能 (SMT) の利用 • Debeziumが内部的に使用するQueueとバッチのサイズ • ポーリング間隔(イベントバッチ処理の間隔) • JVMの設定 • ロギングの設定 ソース データベース
  56. CHANGE DATA CAPTURE Debezium 1.7でのサポート対象構成 56 https://access.redhat.com/articles/4938181 ▸ Debezium on

    OpenShift AMQ Streams version OCP version 2.0 4.6; 4.9 AMQ Streams version RHEL version JVM 2.0 8.x OpenJDK 11 [1] Database Version(s) MySQL 5.7; 8.0 PostgreSQL 10; 11; 12; 13; 14 MongoDB 3.6; 4.0; 4.2; 4.4 SQL Server 2017; 2019 DB2 (Linux only) 11.5 ▸ Debezium on RHEL ▸ データベース ▸ Red Hat Service Registry Product/Component Version(s) Service Registry 2.0.x
  57. CHANGE DATA CAPTURE サポートライフサイクル 57 https://access.redhat.com/ja/support/policy/updates/jboss_notes#p_int DebeziumはRed Hat Application Foundations

    (Red Hat Integration) のサブスクリプションを通じて提供 限定的製品ライフサイクルについて 新しい製品分野や開発フレームワークなどの急速に変化するテクノロジーには、通常 3 年間の限定的製品ライフサイクルが適用されます。限定的製品ライフ サイクルは、フルサポートフェーズの 1 フェーズのみとなります。ただし、一部の製品リリースでは、メンテナンスフェーズが含まれる場合があります。4 年目以降の延長 (「延長ライフサポート」) は、別個のサブスクリプションや対象範囲および SLA に従って利用することができます。
  58. linkedin.com/company/red-hat youtube.com/user/RedHatVideos facebook.com/redhatinc twitter.com/RedHat Red Hat is the world’s leading

    provider of enterprise open source software solutions. Award-winning support, training, and consulting services make Red Hat a trusted adviser to the Fortune 500. Thank you Copyright © 2020 Red Hat, Inc. 58