Edited at

Debeziumの紹介

More than 1 year has passed since last update.


Debeziumとは?

http://debezium.io/

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。