** 本エントリはDistributed computing Advent Calendar 2021の12/1エントリです。
はじめに
Apache Kafkaはメッセージブローカーであると同時にストレージの役割も果たす、それまでのMQの世界観とは少し異なった機能性を有しています。またデータのグループとなるTopicの構成やKafkaを利用するクライアントの設定如何によって全く異なるワークロードを同一クラスタ上で処理する事が可能です。
Kafka創世記には、マイクロサービス間の非同期コミュニケーションやData Lakeへのデータ投入、そしてIoTやサーバー/アプリログのように大量のデータを捌く用途で広く活用されました。その後Kafka ConnectやKafka Streamsの出現により、データソース/シンクとの繋がりやストリーム処理、Exactly Once Semanticsのアプローチが注目され、Kafka上のストリーム処理へとユースケースが広がりました。
ここで改めて、Kafkaが元々思想するStream-Table Duality (ストリーム/テーブル双対性)の現実的なアプローチと、改めてKafkaを「整合性を保ちつつデータを運ぶデータ基盤」として見る動きがエンタープライズで活発になりました。メッセージブローカーからデータプラットフォームへとKafkaに対する市場の見方が変わったのもこの時期です。
本エントリでは、Kafkaのデータデータモデルとそれを扱う論理構成、Stream-Table Duality、そしてデータ整合性の考え方についてご説明します。
参考
Apache Kafka Meetup Japan #9
登壇資料:「カフカはデータベースの夢をみるか」
Kafkaのデータモデル – StreamとLog
チェスとデータベース
データベースは全ての加工処理をメモリで行い、その結果をドライブと同期を取ることにより効率的にデータを永続化しています。一方メモリは揮発性の高いストレージであり、障害時にはそれまでのデータの状態を失っています。トランザクションログはデータとは別にログとしてデータの更新オペレーションを永続化しており、障害時にはドライブへの同期が未だなされていない処理をログに沿って、漏れなく順序通り実行することで復元しています。
レプリケーションはこの内部構造の応用として、データではなくトランザクションログ自体を利用することによりデータを同期しています。チェスにおける一手一手を順序通り打つことにより盤面の状態を再現するのと理屈としては同じです。
Kafkaとデータ
Kafka Connectはデータソース/シンクとKafkaとを繋げる役割を果たす技術です。特にデータベースをソースを見立てた場合にはクエリではなくトランザクションログをEventとして抽出し、順序通りKafkaに渡す事が可能です。アプローチとしてはデータベースのレプリケーションと同じではありますが、このログを運ぶ基盤としてKafkaという汎用的なモデルである為データベースベンダー特有技術への依存関係がありません。
具体的には、例えば:
– データソース/シンクで異なるデータベースを指定したデータのレプリケーション
– 特定のテーブルに限定したレプリケーション
– 連携データのフィルタリング
– 必要なカラムのみの抽出や加工(マスキング、複数カラムから新規のカラム作成、etc.)
をレプリケーションの途中過程で含む事が出来ます。
これらアプローチはデータ加工に別途中間データを格納するストレージを必要とせず、ストリーム自体に対して処理を行う事が出来ます。 (Stream Processing – ストリーム処理) さらにはストリームに対する集約処理(SUM、COUNT、AVG等)や条件によるグルーピング、特定時間枠 (WINDOW) におけるデータ演算等、さらに複雑な処理を行うことも可能です。
Stream-Table Duality
おわりに
本エントリではApache Kafkaのデータに対する思想について少し踏み込んでご説明しました。この思想はKafkaが誕生した際にあった構想であり、機能追加や技術の成熟によってエンタープライズで活用出来る領域まで到達する事が出来ました。また、Kafkaに新たな役割をもたらすようになったことにより、さらに機能の改善や成長、そして時間経過と共に古くなった設計やコードを捨てつつ進化を続けています。
Distributed computing Advent Calendar 2021では次回には続きとしてストリーム処理について、そしてその後ではCloud NativeなKafkaの成長についてご紹介します。
おまけ
「ちょっとKafka触ってみようかな?」とお感じになった方は是非フルマネージドのConfluent Cloudをお試しください。インタラクティブチュートリアルやハンズオンデモ等、多くのリソースも合わせてご利用いただけます。
Confluent Cloud
トライアルでは400USDのクレジットが利用できますが、KAFKA101のプロモコードでさらに101USD追加でご利用できます。
developer.confluent.io ではApache Kafka 101を始めとして、ksqlDBやKafka Streams等Kafkaエコシステムにおける様々な技術のチュートリアルシリーズをご用意しております。