Die Automatisierung der Erstellung und Löschung von Kafka-Themen ist für Entwickler, die ereignisgesteuerte Architekturen verwenden, von entscheidender Bedeutung. Die manuelle Verwaltung wird mit zunehmender Größe Ihrer Kafka-Bereitstellung unpraktisch, unabhängig davon, ob Sie es mit einem wachsenden System zu tun haben oder Infrastruktur als Code implementieren. Dieser Leitfaden zeigt, wie Sie diesen Prozess mithilfe von JavaScript und GitHub-Aktionen automatisieren und ihn nahtlos in Ihren DevOps-Workflow integrieren.
Kafka-Themen sind für die Organisation von Veranstaltungen von grundlegender Bedeutung. Wenn Ihre Architektur wächst, benötigen Sie verschiedene Themen für:
Manuelle Themenverwaltung wird mit zunehmendem Systemwachstum komplex und fehleranfällig. Für jeden neuen Dienst sind möglicherweise neue Themen erforderlich, und jede Umgebung (Entwicklung, Bereitstellung, Produktion) benötigt einen eigenen, konsistent konfigurierten Satz. Ohne Automatisierung verlangsamt dieser manuelle Aufwand die Entwicklung und erhöht die Zahl der Konfigurationsfehler.
Die Automatisierung der Erstellung und Löschung von Kafka-Themen bietet erhebliche Vorteile:
Dieses Tutorial verwendet JavaScript für seine Automatisierungslösung. Während andere Sprachen möglich sind, bietet JavaScript Vorteile:
Diese Lösung wird als Node.js-Anwendung implementiert, die als Kubernetes-Job ausgeführt wird, ideal für Teams, die VPC-zugängliche Kafka-Cluster verwenden.
Sie benötigen ein Node.js-Projekt. Erstellen Sie eines mit npm init -y
. Wenn Node.js und npm nicht installiert sind, laden Sie sie von https://www.php.cn/link/0d78f6439e652fdbf801d103430d2e12 herunter.
Führen Sie in Ihrem Projektverzeichnis npm install kafkajs
aus, um den Kafka-JavaScript-Client zu installieren.
Unsere Automatisierung besteht aus drei Kernkomponenten:
Lassen Sie uns jede Komponente erstellen.
Die Anwendung liest eine JSON-Datei mit den zu erstellenden oder zu löschenden Themen. Dies ermöglicht versionierte Änderungen über GitHub-Pull-Requests. Nach dem Zusammenführen einer PR liest der Code die aktualisierte Datei und erstellt/löscht entsprechend Themen.
Erstellen Sie topics.json
:
<code class="language-json">{ "create": [], "delete": [] }</code>
Diese Struktur bietet eine versionierte Aufzeichnung von Themenverwaltungsaktionen. Das Array create
listet Themen zur Erstellung auf, während delete
Themen zum Entfernen auflistet.
Erstellen Sie 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>
Dieses Modul exportiert Funktionen zum Erstellen und Löschen von Kafka-Themen. Passen Sie die Konfigurationswerte (Partitionen, Replikationsfaktor, min.insync.replicas
) entsprechend Ihren Anforderungen an.
Erstellen Sie 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>
Diese Anwendung verwaltet die Kafka-Verbindung, liest die Themenkonfiguration und orchestriert die Themenerstellung/-löschung. Es enthält Schutzmaßnahmen gegen doppelte Vorgänge und sorgt für eine saubere Verbindungsverarbeitung.
Integrieren Sie die Themenverwaltungsanwendung mithilfe von GitHub Actions in eine CI/CD-Pipeline. Dies automatisiert die Ausführung, wenn sich die Themenkonfiguration ändert.
Hinzufügen .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>
Dieser Workflow automatisiert den Build, die Containerisierung (mit Docker), das Pushen in eine Container-Registrierung (wie Amazon ECR) und die Bereitstellung in Kubernetes als Job.
Diese Anleitung demonstriert die Automatisierung der Erstellung und Löschung von Kafka-Themen mithilfe von JavaScript und GitHub-Aktionen. Dieser Ansatz, der eine JSON-Konfigurationsdatei und GitHub-Aktionen verwendet, bietet eine skalierbare Lösung für die Verwaltung von Kafka-Themen, wenn Ihr System wächst. Durch die Integration der Themenverwaltung in Ihre CI/CD-Pipeline stellen Sie konsistente und zuverlässige Themenkonfigurationen in Ihrer gesamten Kafka-Bereitstellung sicher. Dadurch wird die manuelle Themenverwaltung in einen optimierten, automatisierten Prozess umgewandelt, der auf moderne DevOps-Praktiken abgestimmt ist. Der bereitgestellte Code dient als Grundlage für die Anpassung und Anpassung an Ihre spezifischen Anforderungen.
Das obige ist der detaillierte Inhalt vonSo automatisieren Sie das Erstellen und Löschen von Kafka-Themen mithilfe von GitHub-Aktionen und JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!