ホームページ >ウェブフロントエンド >jsチュートリアル >GitHub アクションと JavaScript を使用して Kafka トピックの作成と削除を自動化する方法

GitHub アクションと JavaScript を使用して Kafka トピックの作成と削除を自動化する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-17 08:32:09721ブラウズ

How to Automate Kafka Topic Creation and Deletion, Using GitHub Actions and JavaScript

Kafka トピックの作成と削除を自動化することは、イベント駆動型アーキテクチャを使用する開発者にとって重要です。 成長するシステムを扱う場合でも、インフラストラクチャをコードとして実装する場合でも、Kafka デプロイメントが拡大するにつれて、手動管理は非現実的になります。このガイドでは、JavaScript と GitHub Actions を使用してこのプロセスを自動化し、DevOps ワークフローにシームレスに統合する方法を説明します。

手動による Kafka トピック管理の課題

Kafka のトピックはイベント開催の基礎です。 アーキテクチャが拡張するにつれて、次のような多様なトピックが必要になります。

  • さまざまなイベントの種類を分類する
  • フィルターされたイベントのサブセットの保存
  • 変換されたイベントのバージョンを維持する

システムの成長に伴い、手動によるトピック管理は複雑になり、エラーが発生しやすくなります。新しいサービスごとに新しいトピックが必要になる場合があり、各環境 (開発、ステージング、運用) には、一貫して構成された独自のセットが必要です。 自動化を行わないと、この手動のオーバーヘッドにより開発が遅くなり、構成エラーが増加します。

トピック管理を自動化する利点

Kafka トピックの作成と削除を自動化すると、次のような大きな利点があります。

  1. すべての環境で一貫したトピック構成。
  2. トピック管理における人的エラーの削減。
  3. トピック構成のバージョン管理。
  4. 合理化された DevOps ワークフロー。
  5. トピックの変更を CI/CD パイプラインに統合します。

適切なツールの選択

このチュートリアルでは、自動化ソリューションに JavaScript を利用します。他の言語も使用できますが、JavaScript には次のような利点があります。

  • Bash よりもシンプルなスクリプト。
  • 既存のチーム JavaScript の専門知識を活用します。
  • npm を介したリッチパッケージエコシステム。
  • Kafka 操作のクリーンな async/await 構文。

このソリューションは、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 つのコアコンポーネントで構成されています:

  1. 作成または削除するトピックを指定する JSON 構成ファイル。
  2. これらの操作を実行するために Kafka と対話する Node.js アプリケーション。
  3. JSON 設定ファイルの変更時に自動化をトリガーする GitHub Actions ワークフロー。

各コンポーネントを構築しましょう。

設定ファイルのセットアップ

アプリケーションは、作成または削除するトピックをリストした JSON ファイルを読み取ります。 これにより、GitHub プル リクエストを介してバージョン管理された変更が可能になります。 PR をマージした後、コードは更新されたファイルを読み取り、それに応じてトピックを作成/削除します。

topics.jsonを作成:

<code class="language-json">{
  "create": [],
  "delete": []
}</code>

この構造は、トピック管理アクションのバージョン管理された記録を提供します。 create 配列には作成用のトピックがリストされ、delete には削除用のトピックがリストされます。

トピック管理 API の構築

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 によるデプロイメントの自動化

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。