「Apache Kafka 分散メッセージングシステムの構築と活用」を読んだ
目次
はじめに
異なるシステム間でデータを連携する際に使用するKafkaについて学ぶ。
Kafkaの生まれた経緯から実際に使用されるケースの紹介などの記載があり、体系的に理解することができた。
導入のメリット
- 高いスループット
- メッセージングモデルとスケールアウト型のアーキテクチャ
- 任意のタイミングでのデータ読み込み
- データのディスクへの永続化
- 各種プロダクトやシステムとの容易な接続
- 分かりやすいAPIの提供
- メッセージをロストしない
- 送達保証
興味のあるトピックをConsumer Groupが並列で処理することで、
メッセージキューモデルとPub/Subのいいとこどりを採用している。
仕組み
Producer
- バッチ送信
- ある程度まとめて(指定サイズor指定時間)データをBrokerへ送信できる
- 一つずつ送信するよりも スループットの向上が期待できる
- ある程度まとめて(指定サイズor指定時間)データをBrokerへ送信できる
- バッチ送信
Consumer
- 読み込み
- 一度の読み込みでCurrent OffsetからLEOまでを読み込む
- 3種類のoffset
- LEO(Log-End-Offset): データの末尾
- Current Offset: どこまで取得したか
- Commit Offset: どこまで処理したか
- Offset Comit
- Auto Offset Comit
- 良い点:明示的なCommitが不要
- 悪い点:定期的にoffsetを更新されるためMessageをロストする可能性あり
- Manual Offset Comit
- 良い点:Commitをコントロールできるのでロストしない
- 悪い点:明示的なCommitが必要、Kafkaの負荷が高まる
- Auto Offset Comit
- Auto Offset Reset
- 初回起動時などでoffsetが不明な場合の読み込み位置
- Consumer Group
- 並列処理したい場合は、同じtopicで同じgroupIdを使用
- 別々で処理させる場合は、同じtopicで異なるgroupIdを使用
- 読み込み
Brokerのデータ保持期間
- デフォルトで1週間
- データの経過時間や保存容量のサイズ指定で削除可能
メッセージの順序性
- 基本的には保証されない