「Apache Kafka 分散メッセージングシステムの構築と活用」を読んだ

目次

はじめに

異なるシステム間でデータを連携する際に使用するKafkaについて学ぶ。

Kafkaの生まれた経緯から実際に使用されるケースの紹介などの記載があり、体系的に理解することができた。

導入のメリット

  • 高いスループット
  • 任意のタイミングでのデータ読み込み
    • データのディスクへの永続化
  • 各種プロダクトやシステムとの容易な接続
    • 分かりやすいAPIの提供
  • メッセージをロストしない
    • 送達保証

興味のあるトピックをConsumer Groupが並列で処理することで、

メッセージキューモデルとPub/Subのいいとこどりを採用している。

仕組み

  • Producer

    • バッチ送信
      • ある程度まとめて(指定サイズ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 Reset
      • 初回起動時などでoffsetが不明な場合の読み込み位置
    • Consumer Group
      • 並列処理したい場合は、同じtopicで同じgroupIdを使用
      • 別々で処理させる場合は、同じtopicで異なるgroupIdを使用
  • Brokerのデータ保持期間

    • デフォルトで1週間
    • データの経過時間や保存容量のサイズ指定で削除可能
  • メッセージの順序性

    • 基本的には保証されない