LoginSignup
38
31

More than 5 years have passed since last update.

Debeziumの紹介

Last updated at Posted at 2017-01-29

Debeziumとは?

DBテーブルへの変更をKafkaトピックに格納して、アプリケーションがストリーミングで変更内容を監視・受信できるようにするソフトウェアです。2016年初頭から、RedHat主導で開発されています。もともと、マイクロサービスを実装するためのソリューションとして開発されたもののようですが、マイクロサービスに関係なく使えます。現時点でMySQLとMongoDBに対応していますが、将来、PostgreSQLやOracleへの対応予定があります。

構成図

DBMSは、変更内容をトランザクションログに記録していきます。MySQLの場合は、バイナリログです。それをKafka Connectサービスがコネクタを使用して監視します。変更を検知したら、テーブル単位で作成されたKafkaトピックに、変更内容を「イベント」としてJSONでシリアライズして記録します。アプリケーションはKafkaのコンシューマなどを使ってKafkaメッセージブローカーに接続し、トピックを監視します。変更イベントが到着したら受信して、アプリケーションの他の処理に利用します。

仕組みの詳細は、FAQを見ると良いと思います。
http://debezium.io/docs/faq/

2017年1月時点のものを、日本語に訳したものです。
http://wp.me/p1mQkm-3A

特徴

DBの変更内容をストリーミングするソフトウェアは他にもありますが、Debeziumには、現在のところ、以下の利点があります。

  • DB特有の処理をコネクタに隔離するアーキテクチャです。将来、様々なDBMSに対応する予定があります。

  • DBMSの中にDebeziumの設定を格納しないような設計思想となっています。

  • Debeziumを起動する前のテーブル変更も、トランザクションログが残っている限り検知できます。

  • KafkaメッセージブローカーとKafka Connectサービスは、それぞれクラスタ構成にして運用できます。

  • Debezium(Kafka)の停止中に行われたDBテーブルの変更は、復旧(再起動)後に拾われます。

  • DBテーブルの内容と、その時点でのDBのテーブル構造の両方が常にイベントに入ってくるので、テーブルのDDLが運用中に変更されるようなケースでも、アプリケーションが追従しやすい仕組みになっています。(ただしそのために、毎回送られてくるJSONドキュメントが大きいのが難点)

試してみる

まずは、チュートリアルを一通りやってみるといいでしょう。
http://debezium.io/docs/tutorial/

2017年1月時点のものを、日本語に訳したものです。
http://wp.me/p1mQkm-1i

チュートリアルは長いですが、概ね、以下のような感じで進んでいきます。

  1. Zookeeper、Kafka(メッセージブローカー)、MySQLサーバ/クライアント、Kafka ConnectサービスとなるDockerコンテナを、順に立てていきます。
  2. Kafka Connectサービスに新規のMySQLコネクタを作成します。
  3. Kafkaトピックを監視をするコンテナを立てて、DBのテーブルへUPDATEやDELETEを発行し、トピックに記録される内容を確認します。
  4. Kafka Connectサービスを停止し、DBテーブルに何個かクエリを投げ、Kafka Connectサービスを起動すると、サービスが停止している間のDBへの変更がトピックに反映されることを確認します。

チュートリアル以上に詳細が知りたい場合は、各DBのコネクタのドキュメントを読むと良いでしょう。

MySQLコネクタ
http://debezium.io/docs/connectors/mysql/

ソースやコミュニティ

GitHubのIssueを使わず、JIRAで報告してください、とのこと。
Pull Requestの前に、チャットやメーリングリストで相談してください、とのこと。Contribute.md必読。

メーリングリストはあまり動きがなく、チャットで開発者の見解が示されることが多いです。
チャットは、リアルタイムで参加している必要はありません。自分の都合の良い時に書いて放置でOK。

38
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
31