自动化 Kafka 主题创建和删除对于使用事件驱动架构的开发人员至关重要。 随着 Kafka 部署的扩展,无论您是处理不断增长的系统还是实施基础设施即代码,手动管理都变得不切实际。本指南演示了如何使用 JavaScript 和 GitHub Actions 自动化此过程,并将其无缝集成到您的 DevOps 工作流程中。
Kafka 主题是活动组织的基础。 随着您的架构扩展,您将需要不同的主题:
随着系统的增长,手动主题管理变得复杂且容易出错。每个新服务可能需要新主题,每个环境(开发、登台、生产)都需要自己一致的配置集。 如果没有自动化,这种手动开销会减慢开发速度并增加配置错误。
自动化 Kafka 主题创建和删除具有显着优势:
本教程使用 JavaScript 作为其自动化解决方案。虽然其他语言也是可能的,但 JavaScript 具有以下优点:
此解决方案作为 Node.js 应用程序实现,作为 Kubernetes 作业运行,非常适合使用 VPC 可访问的 Kafka 集群的团队。
您需要一个 Node.js 项目。使用 npm init -y
创建一个。 如果未安装 Node.js 和 npm,请从//m.sbmmt.com/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中文网其他相关文章!