Kafka トピックの作成と削除を自動化することは、イベント駆動型アーキテクチャを使用する開発者にとって重要です。 成長するシステムを扱う場合でも、インフラストラクチャをコードとして実装する場合でも、Kafka デプロイメントが拡大するにつれて、手動管理は非現実的になります。このガイドでは、JavaScript と GitHub Actions を使用してこのプロセスを自動化し、DevOps ワークフローにシームレスに統合する方法を説明します。
Kafka のトピックはイベント開催の基礎です。 アーキテクチャが拡張するにつれて、次のような多様なトピックが必要になります。
システムの成長に伴い、手動によるトピック管理は複雑になり、エラーが発生しやすくなります。新しいサービスごとに新しいトピックが必要になる場合があり、各環境 (開発、ステージング、運用) には、一貫して構成された独自のセットが必要です。 自動化を行わないと、この手動のオーバーヘッドにより開発が遅くなり、構成エラーが増加します。
Kafka トピックの作成と削除を自動化すると、次のような大きな利点があります。
このチュートリアルでは、自動化ソリューションに JavaScript を利用します。他の言語も使用できますが、JavaScript には次のような利点があります。
このソリューションは、Kubernetes ジョブとして実行される Node.js アプリケーションとして実装されており、VPC からアクセス可能な Kafka クラスターを使用するチームに最適です。
Node.js プロジェクトが必要です。 npm init -y
を使用して作成します。 Node.js と npm がインストールされていない場合は、https://www.php.cn/link/0d78f6439e652fdbf801d103430d2e12 からダウンロードします。
プロジェクト ディレクトリで npm install kafkajs
を実行して、Kafka JavaScript クライアントをインストールします。
私たちの自動化は 3 つのコアコンポーネントで構成されています:
各コンポーネントを構築しましょう。
アプリケーションは、作成または削除するトピックをリストした JSON ファイルを読み取ります。 これにより、GitHub プル リクエストを介してバージョン管理された変更が可能になります。 PR をマージした後、コードは更新されたファイルを読み取り、それに応じてトピックを作成/削除します。
topics.json
を作成:
<code class="language-json">{ "create": [], "delete": [] }</code>
この構造は、トピック管理アクションのバージョン管理された記録を提供します。 create
配列には作成用のトピックがリストされ、delete
には削除用のトピックがリストされます。
api.js
を作成:
<code class="language-javascript">async function createTopics(topics, kafkaAdmin) { if (topics.length > 0) { await kafkaAdmin.createTopics({ topics: topics.map((topic) => ({ topic, numPartitions: 1, // Adjust as needed replicationFactor: 3, // Adjust as needed configEntries: [ { name: "min.insync.replicas", value: "2" } // Adjust as needed ], })), }); } } async function deleteTopics(topics, kafkaAdmin) { if (topics.length > 0) { await kafkaAdmin.deleteTopics({ topics: topics }); } } module.exports = { createTopics, deleteTopics };</code>
このモジュールは、Kafka トピックを作成および削除するための関数をエクスポートします。 ニーズに基づいて構成値 (パーティション、レプリケーション係数、min.insync.replicas
) を調整します。
index.js
を作成:
<code class="language-javascript">const { Kafka } = require("kafkajs"); const { createTopics, deleteTopics } = require("./api"); const topics = require("../topics.json"); // ... (Kafka connection details using environment variables) ... const kafka = new Kafka({ // ... (Kafka connection configuration) ... }); const admin = kafka.admin(); admin.connect().then(async () => { const existingTopics = await admin.listTopics(); // Create only non-existent topics const newTopics = topics.create.filter((x) => !existingTopics.includes(x)); await createTopics(newTopics, admin); // Delete only existing topics const deletionTopics = topics.delete.filter((x) => existingTopics.includes(x)); await deleteTopics(deletionTopics, admin); await admin.disconnect(); });</code>
このアプリケーションは、Kafka 接続を処理し、トピック構成を読み取り、トピックの作成/削除を調整します。 これには重複操作に対する保護機能が含まれており、クリーンな接続処理が保証されます。
GitHub Actions を使用して、トピック管理アプリケーションを CI/CD パイプラインに統合します。 これにより、トピック構成が変更されるたびに実行が自動化されます。
.github/workflows/kafka.yml
を追加:
<code class="language-yaml"># ... (GitHub Actions workflow YAML configuration - This section needs significant adaptation for a real-world scenario and would require setting up AWS credentials, ECR, and Kubernetes cluster details. The provided example is incomplete and illustrative only.) ...</code>
このワークフローは、ビルド、コンテナ化 (Docker を使用)、コンテナ レジストリ (Amazon ECR など) へのプッシュ、およびジョブとしての Kubernetes へのデプロイを自動化します。
このガイドでは、JavaScript と GitHub Actions を使用した Kafka トピックの作成と削除の自動化について説明します。 JSON 構成ファイルと GitHub Actions を使用するこのアプローチは、システムの成長に合わせて Kafka トピックを管理するためのスケーラブルなソリューションを提供します。 トピック管理を CI/CD パイプラインに統合すると、Kafka デプロイメント全体で一貫性と信頼性の高いトピック構成が保証されます。 これにより、手動のトピック管理が、最新の DevOps 実践に合わせた合理化された自動プロセスに変換されます。 提供されたコードは、カスタマイズと特定の要件への適応の基盤として機能します。
以上がGitHub アクションと JavaScript を使用して Kafka トピックの作成と削除を自動化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。