首页 > 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,请从//m.sbmmt.com/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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板