0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0101(2025/04/11)Kafkaを用いた構成

Last updated at Posted at 2025-04-10

Kafkaを用いた高信頼・高スループットなイベント駆動アーキテクチャの実践

Apache Kafkaは、分散型ログ収集・ストリーム処理基盤として広く採用されている高性能メッセージングシステムである。本稿では、Kafkaを用いた非同期アーキテクチャの構築手法、ならびにその利点と代替技術との比較を、PythonおよびNode.jsによる実装例とともに概説する。


✅ Kafkaのアーキテクチャ構成要素

  • Producer

    • Kafkaクラスタにイベント(メッセージ)を送信する役割を担うエンドポイント。
    • 例:Webアプリケーションからのログデータ送信。
  • Consumer

    • Kafkaの特定トピックからイベントを購読し、後続処理に供する。
    • 例:ログ情報をデータベースや分析基盤に格納。
  • Broker

    • 実際のメッセージを保持・管理するKafkaノード。
  • Topic

    • メッセージのカテゴリやチャネルを意味する単位。トピック内のメッセージは厳密な順序を保持する。
  • Offset

    • 各メッセージに対する一意な位置情報。Consumerがどこまで読み進めたかを管理する。

📚 ユースケース

1. セキュアで拡張性の高いログ基盤

Webアプリケーションの操作ログやセキュリティイベントをKafkaに送信し、ConsumerがそれをElasticsearchやS3、BigQuery等の外部ストレージに非同期で保存。スケーラブルかつ高可用なログ収集処理を実現できる。

2. イベント駆動による通知分離

ユーザーの操作に応じた通知処理(例:メール、プッシュ通知)をイベント化し、Kafkaで疎結合に扱うことで、通知ロジックをアプリケーション本体から分離・独立させることができる。

3. ストリームデータのリアルタイム分析

IoTセンサーデータや金融取引ログなどをリアルタイムでKafkaに集約し、Consumer側で逐次処理・モニタリングを実施。Kafka StreamsやApache Flinkとの統合によって、より複雑なCEP(Complex Event Processing)も可能。


✨ Kafkaを用いるメリット

  • 高スループット:ディスクベースの連続書き込みおよびバッチ送信により、1秒あたり数百万件のメッセージ処理が可能。
  • 耐障害性:複数Broker間のレプリケーションにより、ノード障害時もデータを損なうことなくリカバリ可能。
  • オフセット管理:Consumer側で処理位置(offset)を制御できるため、再処理や追跡性が保証される。
  • スケーラビリティ:Partitionをキーに分散配置し、Consumer Groupによって負荷分散が容易。
  • 柔軟な統合性:Kafka ConnectやREST Proxyを通じて外部システムとの双方向連携が可能。

⚠️ Kafkaの非採用時における代替技術

技術 特徴
RabbitMQ メッセージングにおける高度なルーティングとキュー制御機構を有する。
Redis Pub/Sub 超高速・軽量なPub/Subモデル。永続性は保証されない。
WebSocket クライアント-サーバー間の双方向通信に最適。ただし信頼性や耐障害性の実装は別途必要。
AWS SQS + Lambda サーバーレスアーキテクチャと組み合わせたキュー処理に適する。

🔧 Kafkaを活用したシステム実装例

Node.js によるProducer実装

const { Kafka } = require('kafkajs');
const kafka = new Kafka({ clientId: 'webapp', brokers: ['localhost:9092'] });
const producer = kafka.producer();

async function sendLog(logData) {
  await producer.connect();
  await producer.send({
    topic: 'logs',
    messages: [{ value: JSON.stringify(logData) }]
  });
  await producer.disconnect();
}

sendLog({ user: 'keita', action: 'login' });

Python によるConsumer実装

from kafka import KafkaConsumer
import json

consumer = KafkaConsumer(
    'logs',
    bootstrap_servers='localhost:9092',
    group_id='logger-group',
    value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)

for message in consumer:
    log = message.value
    print(f"[LOG] User: {log['user']}, Action: {log['action']}")

結語

Kafkaはイベント駆動アーキテクチャにおける要となる技術であり、特に高スループット処理やリアルタイム性が求められる分野(金融、IoT、ログ収集など)で真価を発揮する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?