🤡

【初心者】RedisとApche Kafka

2025/01/15に公開

参考記事

https://zenn.dev/tatsuki_otake/articles/41f3e2e7d31386

状況

  • 前回の記事にキューとメッセージキューについてまとめた(参考記事)
  • 一方で、知りたいのはRedisとApche Kafkaだったので、初心者が理解しやすいような視点からイメージを記載してみる

Redis(レディス)とは

公式サイト
https://redis.io/

  • Redis(レディス)は、Remote Dictionary Serverの略で、オープンソースのインメモリデータストア
  • 主に以下のような用途で使われる:
    • キャッシュ: 高速なデータアクセスが必要な場面での一時的なデータ保存
    • メッセージキュー: タスクの非同期処理
    • データベース: シンプルなキーと値のペアを保存するデータベースとして利用
    • セッション管理: ユーザーのログイン情報や一時データの管理
  • Redisはインメモリ(メモリ上にデータを保持) で動作するため、非常に高速
    また、リスト、セット、ハッシュ、ソート済みセットなど、様々なデータ構造をサポートしている

特徴

  1. 高速性: メモリ上で動作するため、データの読み書きが非常に速い
  2. 多彩なデータ構造: キーと値だけでなく、リストやハッシュ、セットなども扱える
  3. シンプルなコマンド: 使いやすいコマンド体系
  4. 永続化機能: データをディスクに保存しておくことで、再起動後もデータを保持できる(オプションで選択可能)
  5. 分散性: クラスタリング機能により、大規模なシステムにも対応

日常の具体例(個人用郵便ボックス)

  • シンプルで即座に使える(即時性)
    • 郵便ボックスは家の近くにあり、手紙(データ)を直接投函したり、取り出したりできる。処理は迅速で、複雑な手続きは必要ない
  • 短期間のデータ保存(短期保存)
    • 手紙は郵便ボックスに保存されるが、長期間放置すると郵便局員が回収したり、内容が消えることがある(Redisのデータはメモリ上に保存されるため、永続性には限界がある)
  • 用途
    • 個人の短期的なメモやリクエスト(例:「明日の予定」や「冷蔵庫に牛乳を買う」)に適する

Redisを使った具体例

  • Webアプリケーションでの「いいね!」ボタンのカウント
  • 一時的なキャッシュデータの保存

Apche Kafka(アパッチ カフカ)とは

公式サイト
https://kafka.apache.org/

  • 分散型イベントストリーミングプラットフォーム
  • 主に以下の用途で使用される:
    • リアルタイムデータ処理
      大量のデータをリアルタイムで収集、保存、処理、配信します。
    • 分散システム間のデータ連携
      異なるシステム間でデータを効率的にやり取りするメッセージブローカーとして活用されます。
    • イベント駆動型アーキテクチャ
      例えば、ユーザーがボタンをクリックした瞬間のイベントを処理し、システム全体で反映します。
  • Kafkaは、分散型システムにおける「リアルタイムなログやデータの流れのハブ」と考えるとわかりやすい

特徴

  1. 高スループット: 大量のデータを効率的に処理可能
  2. 分散型設計: データを複数のノードに分散して保存し、高い信頼性を確保
  3. 永続性: データを長期間保存可能(デフォルトでディスクに保存)
  4. 柔軟性: 1つのデータを複数のシステム(コンシューマー)に配信可能
  5. スケーラビリティ: 新しいノードを簡単に追加して性能を拡張できる

日常の具体例:宅配便の仕分けセンター

  • 複雑なルート管理が可能(高いスループット & 配信先の柔軟性)
    仕分けセンターでは、荷物(メッセージ)がどこに届けられるべきか(配信先)を細かく設定可
    複数の宛先に同時に送ることも可能(1つのメッセージを複数のシステムが処理)
  • データの長期間保存(高い耐久性)
    荷物の記録は長期間保持されるため、後から確認したり再送したりできる
    (Kafkaのトピックにメッセージが一定期間保存される)
  • 用途
    大規模な物流(例: 複数の店舗への商品配送)に適しており、全体のフローを管理できる

Kafkaを使った具体例:

  • 分散システム間のリアルタイムデータ同期
  • IoTセンサーのデータ収集と処理
  • 金融取引ログのストリーミング処理

Redis(郵便ボックス) vs Kafka(宅配便センター)

特徴 Redis(郵便ボックス) Kafka(宅配便仕分けセンター)
スピード 超高速、簡単なデータアクセス 高スループット(大量データ処理可能)
データ保存期間 短期保存が基本(データが揮発しやすい) 長期間保存可能(データの履歴を保持)
配信方法 シンプルで直接的なデータのやり取り 配信先の選択や複数宛先への配信が柔軟
用途 キャッシュや一時的なデータ保存 大量データの配信と履歴管理
「Webサイトの一時的なログインセッション情報の保存」 「Eコマースサイトのリアルタイム注文処理管理」

所見

  • Redisは「個人用郵便ボックス」のように軽量でシンプル、素早いデータ保存・取得が得意
  • Kafkaは「宅配便の仕分けセンター」のように複雑なルーティングや大規模なデータ管理が得意
  • どちらを使うべきかは、システムの規模と要件に応じて選択

P.S

どちらも一つのツールの枠には収まらなくなってきている
Redis:

  • データストアでありながらメッセージキューとして使える
  • 主に「データを一時的または短期間保持するためのインメモリデータストア」として設計されているが、特定の操作やデータ構造を活用することでメッセージキューとしても使用できる
    • リスト(List)を使った簡易キュー
    • Pub/Sub(公開/購読モデル
    • Luaスクリプトなどによるカスタマイズ

Apache Kafka:

  • メッセージキューでありながらデータベースのような耐久性を持つ
  • 基本的にはメッセージキューとして設計されているが、永続性やスケーラビリティの観点からデータベースに近い特性も持っている
    • 永続性
    • 耐障害性
    • オフセット管理
    • ストリーミング処理
    • スケーラビリティ
  • 一方で複雑なクエリ(SQLのような検索操作)はできないので、完全なデータベースの代替にはならず

Discussion