kafka
Apache Kafkaを活用し、メッセージング基盤の構築、リアルタイムデータ処理、マイクロサービス連携などを実現することで、イベント駆動型のシステムを構築するSkill。
📜 元の英語説明(参考)
Build event-driven systems with Apache Kafka. Use when a user asks to set up message streaming, implement event sourcing, build pub/sub systems, process real-time data streams, or connect microservices with async messaging.
🇯🇵 日本人クリエイター向け解説
Apache Kafkaを活用し、メッセージング基盤の構築、リアルタイムデータ処理、マイクロサービス連携などを実現することで、イベント駆動型のシステムを構築するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o kafka.zip https://jpskill.com/download/15034.zip && unzip -o kafka.zip && rm kafka.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/15034.zip -OutFile "$d\kafka.zip"; Expand-Archive "$d\kafka.zip" -DestinationPath $d -Force; ri "$d\kafka.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
kafka.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
kafkaフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Apache Kafka
概要
Kafka は、高スループットで耐障害性に優れたメッセージングのための分散型イベントストリーミングプラットフォームです。リアルタイムデータパイプライン、イベントソーシング、ログ集約、マイクロサービス通信に使用される、イベント駆動型アーキテクチャのバックボーンです。
手順
ステップ 1: ローカルセットアップ
# docker-compose.yml — Kafka with KRaft (no ZooKeeper)
services:
kafka:
image: bitnami/kafka:latest
ports:
- "9092:9092"
environment:
KAFKA_CFG_NODE_ID: 1
KAFKA_CFG_PROCESS_ROLES: broker,controller
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
ステップ 2: Node.js プロデューサー
// producer.ts — Send events to Kafka
import { Kafka, Partitioners } from 'kafkajs'
const kafka = new Kafka({ brokers: ['localhost:9092'] })
const producer = kafka.producer({ createPartitioner: Partitioners.DefaultPartitioner })
await producer.connect()
// Send single event
await producer.send({
topic: 'orders',
messages: [
{
key: 'order-123', // partition key (orders for same user go to same partition)
value: JSON.stringify({
orderId: 'order-123',
userId: 'user-456',
items: [{ sku: 'WIDGET-1', quantity: 2, price: 29.99 }],
total: 59.98,
createdAt: new Date().toISOString(),
}),
},
],
})
// Batch send
await producer.sendBatch({
topicMessages: [
{ topic: 'orders', messages: events.map(e => ({ key: e.id, value: JSON.stringify(e) })) },
],
})
await producer.disconnect()
ステップ 3: コンシューマー
// consumer.ts — Process events from Kafka
const consumer = kafka.consumer({ groupId: 'order-service' })
await consumer.connect()
await consumer.subscribe({ topic: 'orders', fromBeginning: false })
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
const order = JSON.parse(message.value.toString())
console.log(`Processing order ${order.orderId} from partition ${partition}`)
// Process the order (idempotently — messages can be redelivered)
await processOrder(order)
},
})
// Graceful shutdown
process.on('SIGTERM', async () => {
await consumer.disconnect()
})
ステップ 4: Python コンシューマー
# consumer.py — Kafka consumer with confluent-kafka
from confluent_kafka import Consumer
conf = {
'bootstrap.servers': 'localhost:9092',
'group.id': 'analytics-service',
'auto.offset.reset': 'earliest',
}
consumer = Consumer(conf)
consumer.subscribe(['orders'])
while True:
msg = consumer.poll(1.0)
if msg is None:
continue
if msg.error():
print(f"Error: {msg.error()}")
continue
order = json.loads(msg.value().decode('utf-8'))
print(f"Processing: {order['orderId']}")
ガイドライン
- 関連するイベントが同じパーティションに確実に送られるように、パーティションキーを使用します(順序保証)。
- コンシューマーグループは並列処理を可能にします。各パーティションはグループ内の1つのコンシューマーによって消費されます。
- コンシューマーをべき等にしてください。Kafka はデフォルトで少なくとも1回の配信を保証します。
- マネージド Kafka について: Confluent Cloud、AWS MSK、または Redpanda (Kafka 互換、よりシンプル) を使用します。
- KRaft モード (ZooKeeper なし) は Kafka 3.3 以降、本番環境に対応しています。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Apache Kafka
Overview
Kafka is a distributed event streaming platform for high-throughput, fault-tolerant messaging. It's the backbone of event-driven architectures — used for real-time data pipelines, event sourcing, log aggregation, and microservice communication.
Instructions
Step 1: Local Setup
# docker-compose.yml — Kafka with KRaft (no ZooKeeper)
services:
kafka:
image: bitnami/kafka:latest
ports:
- "9092:9092"
environment:
KAFKA_CFG_NODE_ID: 1
KAFKA_CFG_PROCESS_ROLES: broker,controller
KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
Step 2: Node.js Producer
// producer.ts — Send events to Kafka
import { Kafka, Partitioners } from 'kafkajs'
const kafka = new Kafka({ brokers: ['localhost:9092'] })
const producer = kafka.producer({ createPartitioner: Partitioners.DefaultPartitioner })
await producer.connect()
// Send single event
await producer.send({
topic: 'orders',
messages: [
{
key: 'order-123', // partition key (orders for same user go to same partition)
value: JSON.stringify({
orderId: 'order-123',
userId: 'user-456',
items: [{ sku: 'WIDGET-1', quantity: 2, price: 29.99 }],
total: 59.98,
createdAt: new Date().toISOString(),
}),
},
],
})
// Batch send
await producer.sendBatch({
topicMessages: [
{ topic: 'orders', messages: events.map(e => ({ key: e.id, value: JSON.stringify(e) })) },
],
})
await producer.disconnect()
Step 3: Consumer
// consumer.ts — Process events from Kafka
const consumer = kafka.consumer({ groupId: 'order-service' })
await consumer.connect()
await consumer.subscribe({ topic: 'orders', fromBeginning: false })
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
const order = JSON.parse(message.value.toString())
console.log(`Processing order ${order.orderId} from partition ${partition}`)
// Process the order (idempotently — messages can be redelivered)
await processOrder(order)
},
})
// Graceful shutdown
process.on('SIGTERM', async () => {
await consumer.disconnect()
})
Step 4: Python Consumer
# consumer.py — Kafka consumer with confluent-kafka
from confluent_kafka import Consumer
conf = {
'bootstrap.servers': 'localhost:9092',
'group.id': 'analytics-service',
'auto.offset.reset': 'earliest',
}
consumer = Consumer(conf)
consumer.subscribe(['orders'])
while True:
msg = consumer.poll(1.0)
if msg is None:
continue
if msg.error():
print(f"Error: {msg.error()}")
continue
order = json.loads(msg.value().decode('utf-8'))
print(f"Processing: {order['orderId']}")
Guidelines
- Use partition keys to ensure related events go to the same partition (ordering guarantee).
- Consumer groups enable parallel processing — each partition is consumed by one consumer in the group.
- Make consumers idempotent — Kafka guarantees at-least-once delivery by default.
- For managed Kafka: Confluent Cloud, AWS MSK, or Redpanda (Kafka-compatible, simpler).
- KRaft mode (no ZooKeeper) is production-ready since Kafka 3.3+.