首頁 > web前端 > js教程 > 如何使用 GitHub Actions 和 JavaScript 自動建立和刪除 Kafka 主題

如何使用 GitHub Actions 和 JavaScript 自動建立和刪除 Kafka 主題

Susan Sarandon
發布: 2025-01-17 08:32:09
原創
719 人瀏覽過

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 操作的簡潔非同步/等待語法。

此解決方案作為 Node.js 應用程式實現,作為 Kubernetes 作業運行,非常適合使用 VPC 可存取的 Kafka 叢集的團隊。

設定應用程式

您需要一個 Node.js 專案。使用 npm init -y 建立一個。 如果未安裝 Node.js 和 npm,請從https://www.php.cn/link/0d78f6439e652fdbf801d103430d2e12下載。

在您的專案目錄中,執行 npm install kafkajs 安裝 Kafka JavaScript 用戶端。

實施解決方案

我們的自動化包含三個核心元件:

  1. 指定要建立或刪除的主題的 JSON 設定檔。
  2. Node.js 應用程式與 Kafka 互動來執行這些操作。
  3. GitHub Actions 工作流程在 JSON 設定檔變更時觸發自動化。

讓我們建構每個元件。

設定檔設定

應用程式讀取列出要建立或刪除的主題的 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 Actions 和 JavaScript 自動建立和刪除 Kafka 主題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板