🤡
【初心者】RedisとApche Kafka
参考記事
状況
- 前回の記事にキューとメッセージキューについてまとめた(参考記事)
- 一方で、知りたいのはRedisとApche Kafkaだったので、初心者が理解しやすいような視点からイメージを記載してみる
Redis(レディス)とは
公式サイト
- Redis(レディス)は、Remote Dictionary Serverの略で、オープンソースのインメモリデータストア
- 主に以下のような用途で使われる:
- キャッシュ: 高速なデータアクセスが必要な場面での一時的なデータ保存
- メッセージキュー: タスクの非同期処理
- データベース: シンプルなキーと値のペアを保存するデータベースとして利用
- セッション管理: ユーザーのログイン情報や一時データの管理
- Redisはインメモリ(メモリ上にデータを保持) で動作するため、非常に高速
また、リスト、セット、ハッシュ、ソート済みセットなど、様々なデータ構造をサポートしている
特徴
- 高速性: メモリ上で動作するため、データの読み書きが非常に速い
- 多彩なデータ構造: キーと値だけでなく、リストやハッシュ、セットなども扱える
- シンプルなコマンド: 使いやすいコマンド体系
- 永続化機能: データをディスクに保存しておくことで、再起動後もデータを保持できる(オプションで選択可能)
- 分散性: クラスタリング機能により、大規模なシステムにも対応
日常の具体例(個人用郵便ボックス)
-
シンプルで即座に使える(即時性)
- 郵便ボックスは家の近くにあり、手紙(データ)を直接投函したり、取り出したりできる。処理は迅速で、複雑な手続きは必要ない
-
短期間のデータ保存(短期保存)
- 手紙は郵便ボックスに保存されるが、長期間放置すると郵便局員が回収したり、内容が消えることがある(Redisのデータはメモリ上に保存されるため、永続性には限界がある)
-
用途
- 個人の短期的なメモやリクエスト(例:「明日の予定」や「冷蔵庫に牛乳を買う」)に適する
Redisを使った具体例
- Webアプリケーションでの「いいね!」ボタンのカウント
- 一時的なキャッシュデータの保存
Apche Kafka(アパッチ カフカ)とは
公式サイト
- 分散型イベントストリーミングプラットフォーム
- 主に以下の用途で使用される:
-
リアルタイムデータ処理
大量のデータをリアルタイムで収集、保存、処理、配信します。 -
分散システム間のデータ連携
異なるシステム間でデータを効率的にやり取りするメッセージブローカーとして活用されます。 -
イベント駆動型アーキテクチャ
例えば、ユーザーがボタンをクリックした瞬間のイベントを処理し、システム全体で反映します。
-
リアルタイムデータ処理
- Kafkaは、分散型システムにおける「リアルタイムなログやデータの流れのハブ」と考えるとわかりやすい
特徴
- 高スループット: 大量のデータを効率的に処理可能
- 分散型設計: データを複数のノードに分散して保存し、高い信頼性を確保
- 永続性: データを長期間保存可能(デフォルトでディスクに保存)
- 柔軟性: 1つのデータを複数のシステム(コンシューマー)に配信可能
- スケーラビリティ: 新しいノードを簡単に追加して性能を拡張できる
日常の具体例:宅配便の仕分けセンター
-
複雑なルート管理が可能(高いスループット & 配信先の柔軟性)
仕分けセンターでは、荷物(メッセージ)がどこに届けられるべきか(配信先)を細かく設定可
複数の宛先に同時に送ることも可能(1つのメッセージを複数のシステムが処理) -
データの長期間保存(高い耐久性)
荷物の記録は長期間保持されるため、後から確認したり再送したりできる
(Kafkaのトピックにメッセージが一定期間保存される) -
用途
大規模な物流(例: 複数の店舗への商品配送)に適しており、全体のフローを管理できる
Kafkaを使った具体例:
- 分散システム間のリアルタイムデータ同期
- IoTセンサーのデータ収集と処理
- 金融取引ログのストリーミング処理
Redis(郵便ボックス) vs Kafka(宅配便センター)
特徴 | Redis(郵便ボックス) | Kafka(宅配便仕分けセンター) |
---|---|---|
スピード | 超高速、簡単なデータアクセス | 高スループット(大量データ処理可能) |
データ保存期間 | 短期保存が基本(データが揮発しやすい) | 長期間保存可能(データの履歴を保持) |
配信方法 | シンプルで直接的なデータのやり取り | 配信先の選択や複数宛先への配信が柔軟 |
用途 | キャッシュや一時的なデータ保存 | 大量データの配信と履歴管理 |
例 | 「Webサイトの一時的なログインセッション情報の保存」 | 「Eコマースサイトのリアルタイム注文処理管理」 |
所見
- Redisは「個人用郵便ボックス」のように軽量でシンプル、素早いデータ保存・取得が得意
- Kafkaは「宅配便の仕分けセンター」のように複雑なルーティングや大規模なデータ管理が得意
- どちらを使うべきかは、システムの規模と要件に応じて選択
P.S
どちらも一つのツールの枠には収まらなくなってきている
Redis:
- データストアでありながらメッセージキューとして使える
- 主に「データを一時的または短期間保持するためのインメモリデータストア」として設計されているが、特定の操作やデータ構造を活用することでメッセージキューとしても使用できる
- リスト(List)を使った簡易キュー
- Pub/Sub(公開/購読モデル
- Luaスクリプトなどによるカスタマイズ
Apache Kafka:
- メッセージキューでありながらデータベースのような耐久性を持つ
- 基本的にはメッセージキューとして設計されているが、永続性やスケーラビリティの観点からデータベースに近い特性も持っている
- 永続性
- 耐障害性
- オフセット管理
- ストリーミング処理
- スケーラビリティ
- 一方で複雑なクエリ(SQLのような検索操作)はできないので、完全なデータベースの代替にはならず
Discussion