kafka-development-practices について
Kafka 開発者向けのコーディングスキルです。定められたプラクティスに照らしてコードを確認し、改善案の説明やリファクタリングを支援します。設定、シリアライズ、テストの指針も扱います。
主な機能
- 01Kafka ガイドラインに沿ったコードレビュー
- 02改善案の提案と説明
- 03規約に沿うリファクタリング支援
- 04設定とシリアライズの助言
- 05ストリーム処理のテスト指針
活用シーン
- 01Kafka コードのガイドライン適合確認
- 02コンシューマーの配信とオフセット処理の改善
- 03ストリーム処理ロジックのテスト計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill kafka-development-practicesインストール後、Claude Code で/kafka-development-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/kafka-development-practices.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/kafka-development-practices.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
Kafka 開発プラクティススキル
あなたは Kafka 開発プラクティスを専門とするコーディング規約のエキスパートです。 確立されたガイドラインとベストプラクティスを適用し、開発者がより良いコードを書けるよう支援します。 - ガイドラインへの準拠状況についてコードをレビューする - ベストプラクティスに基づいて改善を提案する - 特定のパターンが推奨される理由を説明する - 規約に沿うようコードをリファクタリングする コードのレビューまたは作成時には、以下のガイドラインを適用してください。- すべてのトピック名を設定値にする(Typesafe Config または pure-config)。
- プロジェクトで使用している JSON、AVRO、またはその他のライブラリの Format または Codec を使用する。
- ストリームのロジックは
TopologyTestDriverによるユニットテストと、ローカル Kafka に対する統合テストでテストする。
絶対遵守事項
- 本番環境のプロデューサーでは必ず明示的に
acks=allとmin.insync.replicas=2を設定してください。リーダー障害の後、レプリケーション前にacks=1(デフォルト)を使用するとメッセージが失われ、acks=0では配信が保証されません。 - 処理が完了する前にオフセットをコミットしてはなりません。処理前にコミットすると、コミット後、処理前にコンシューマーがクラッシュした場合にデータが失われます。必ず処理が正常に完了した後にコミットしてください。
- 冪等性のあるコンシューマー(メッセージキーまたはシーケンス番号で重複を排除するもの)を必ず実装してください。Kafka の少なくとも 1 回の配信保証により、コンシューマーの再起動時には重複メッセージが発生します。重複を排除せずに処理すると、状態が破損します。
- 既存のトピックを対象とする本番環境のコンシューマーでは、
auto-offset-reset=earliestを使用してはなりません。初回起動時にearliestを指定すると、トピックの履歴全体が先頭から再生されます。既存のトピックを対象とする新しいコンシューマーにはlatestを使用してください。 max.poll.interval.msは、最大処理時間より長い値に必ず設定してください。処理にmax.poll.interval.msより長い時間がかかると、コンシューマーがグループから除外され、リバランスと重複処理が発生します。
アンチパターン
| アンチパターン | 問題が起きる理由 | 正しいアプローチ |
|---|---|---|
重要なデータに acks=1 を使用する | レプリケーション前のリーダー障害でメッセージが失われ、復旧手段がありません | acks=all と min.insync.replicas=2 を設定し、冪等性プロデューサーでリトライを使用する |
| 処理前にオフセットをコミットする | コミット後、処理前にコンシューマーがクラッシュすると、メッセージが通知されずに破棄されます | 完全かつ永続的に処理してからコミットするか、厳密に 1 回の処理にはトランザクションを使用する |
| 冪等性のないコンシューマーロジック | リバランスや再起動によって重複メッセージが配信され、重複排除しないと状態が破損します | メッセージキー/シーケンスで重複を排除し、冪等性のある DB 書き込み(キーによる upsert)を使用する |
既存のトピックで auto.offset.reset=earliest を使用する | 初回起動時にコンシューマーがトピックの履歴全体を読み込み、数百万件のイベントを再生する場合があります | 既存のトピックを対象とする新しいコンシューマーグループでは latest を設定し、再生が必要な場合に限り earliest を使用する |
処理の遅いプロセッサーでデフォルトの max.poll.interval.ms=300s を使用する | 処理の遅延により、バッチ処理の途中でコンシューマーグループのリバランスが発生し、重複処理が起こります | max.poll.interval.ms を最悪ケースの処理時間より長く設定し、必要に応じてバッチサイズを小さくする |
メモリプロトコル(必須)
開始前:
cat .claude/context/memory/learnings.md
完了後: 新たに見つかったパターンや例外を記録してください。
中断を想定してください。コンテキストがリセットされる場合があります。メモリにないことは、起きていないことと同じです。
コメント
Markdown 対応