自動化 Kafka 主題建立和刪除對於使用事件驅動架構的開發人員至關重要。 隨著 Kafka 部署的擴展,無論您是處理不斷增長的系統還是實施基礎設施即程式碼,手動管理都變得不切實際。本指南示範如何使用 JavaScript 和 GitHub Actions 自動化此流程,並將其無縫整合到您的 DevOps 工作流程中。
Kafka 主題是活動組織的基礎。 隨著您的架構擴展,您將需要不同的主題:
隨著系統的成長,手動主題管理變得複雜且容易出錯。每個新服務可能需要新主題,每個環境(開發、登台、生產)都需要自己一致的配置集。 如果沒有自動化,這種手動開銷會減慢開發速度並增加配置錯誤。
自動化 Kafka 主題建立和刪除具有顯著優勢:
本教學使用 JavaScript 作為其自動化解決方案。雖然其他語言也是可能的,但 JavaScript 有以下優點:
此解決方案作為 Node.js 應用程式實現,作為 Kubernetes 作業運行,非常適合使用 VPC 可存取的 Kafka 叢集的團隊。
您需要一個 Node.js 專案。使用 npm init -y
建立一個。 如果未安裝 Node.js 和 npm,請從https://www.php.cn/link/0d78f6439e652fdbf801d103430d2e12下載。
在您的專案目錄中,執行 npm install kafkajs
安裝 Kafka JavaScript 用戶端。
我們的自動化包含三個核心元件:
讓我們建構每個元件。
應用程式讀取列出要建立或刪除的主題的 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 Actions 和 JavaScript 自動建立和刪除 Kafka 主題的詳細內容。更多資訊請關注PHP中文網其他相關文章!