Kafka Cluster SBB

Im Auftragsverhältnis bei der SBB diente Puzzle ITC als Unterstützung beim Aufbau eines Kafka Clusters auf Basis von Red Hat AMQ Streams und OpenShift.

Ausgangslage

Ziel war es, auf der Container Plattform OpenShift für diverse Projekte der SBB eine Messaging und Streaming Plattform zur Verfügung zu stellen. Bereits zu Beginn wurde der Fokus auf einen hohen Automatisierungsgrad und Self-Service für die Entwickler-Teams gelegt. Für verteilte Applikationsarchitekturen stellt die Kafka Infrastruktur den Backbone für Messaging und Streamprocessing zur Verfügung.

Lösung/Projekt

Die Basis des Kafka Cluster bildet dabei das Produkt AMQ Streams von Red Hat. Es handelt sich dabei um die Enterprise Distribution von Strimzi. Das Produkt besteht aus verschiedenen Custom Resource Definitions sowie den dazugehörenden Operators. Es ermöglicht das Installieren, Deployen, Verwalten sowie Lifecyclen eines Kafka Clusters (inklusive Teile des Ökosystem auf einem OpenShift Cluster).

Beim Setup, Lifecycle und Maintenance der Kafka Cluster wurde ein hoher Automatisierungsgrad angestrebt und umgesetzt. Dies ermöglicht es, neue Cluster, welche für spezifische Use Cases optimiert sind, auf eine schnelle und effiziente Weise auszurollen. Der Selfservice-Gedanke für die Entwicklerteams wurde durch die Implementierung eines Portals, welches die nötigen Schnittstellen zur Verfügung stellt, umgesetzt. So können Teams autonom die benötigten Kafka Ressourcen erstellen und managen.

Um die Stabilität des Clusters im Betrieb sicherstellen zu können, wurden automatisierte Testfälle implementiert. Insbesondere nach Updates von Komponenten sind diese ein wertvolles Werkzeug, um die Funktionsweise von neuen Releases zu prüfen. Die Testfälle bestanden aus einfachen Operationen wie Schreiben und Lesen von Messages sowie auch komplexeren Fehlerszenarien wie Simulationen von Ausfällen von Teilen des Ökosystems.

Das Monitoring von Kafka Clustern ist ein wichtiger Bestandteil um Betriebsstabilität zu garantieren und hilft zur Früherkennung von Problemen, die in Zukunft auftreten können. Dafür wurde der bewährte Prometheus / Grafana Stack verwendet.

Rolle von Puzzle ITC

Puzzle ITC hat die SBB bei folgenden Arbeiten unterstützt:

  • Architektur der Plattform und deren Ökosystem definieren
  • Aufbau und Engineering der Messaging und Streaming Plattform
  • Integration des Kafka Ökosystem in die Systemlandschaft der SBB
  • Integration der Plattform in die bestehende Monitoring und Alerting Infrastruktur
  • Erarbeiten, Testen und Dokumentieren von betrieblichen Szenarien und Fehlerszenarien
  • Implementieren von automatisierten Testfällen gegen die OpenShift und Kafka API
  • Automatisierung von Deployments und Updates der Kafka Clusters mittels Pipelines
  • Definieren der relevanten Monitoring Metriken und deren Visualisierung

Techstack

Red Hat AMQ Streams
AMQ Streams ist die Enterprise Distribution des Upstream-Projekts Strimzi und ermöglicht das Betreiben eines Kafka Ökosystems auf OpenShift. Strimzi unterstützt dabei auch Kubernetes als Container Plattform. Die wichtigsten Komponenten von AMQ Streams sind die Custom Resource Definitions und die Operators. Für die Komponenten des Kafka Ökosystems existieren jeweils verschiedene CRDs, welche in yaml-Files parametrisiert und über die OpenShift CLI ausgerollt werden. Die Operators lesen die Parametern aus den CRDs und erstellen die Komponenten des Kafka Ökosystems.
Folgende Grafik Zeigt die AMQ Streams zugrundeliegende Architektur:

Quelle: https://access.redhat.com/documentation/en-us/red_hat_amq/7.5/html-single/evaluating_amq_streams_on_openshift/index

OpenShift
Als Container Orchestrator kommt bei der SBB OpenShift zum Einsatz. Kafka und dessen Ökosystem wird vollständig in Containern auf Basis von Docker auf OpenShift betrieben.

BDD Testing
Die automatisierten Tests wurden in Java mittels Cucumber nach dem Behaviour-Driven Development Paradigma realisiert. Die Testdefinitionen erfolgen dabei in Gherkin und sind für jedermann verständlich. Die Implementation der Tests erfolgte in Java mithilfe der Kafka Client und Admin API sowie der OpenShift API. Getriggert wurden die Tests durch Pipelines.

Deployment Pipeline
Die Deployment Pipelines des Ökosystems wurden mittels Jenkins und Ansible realisiert.

Prometheus & Grafana
Prometheus und Grafana dienen als Werkzeug für die Betriebs-Überwachung.

Apache Kafka
Als Basis für die Plattform kommt eine durch Red Hat erweiterte Version der frei verfügbaren Kafka Distribution zum Einsatz.

Apache ZooKeeper
Apache ZooKeeper ist unter anderem ein kritischer Bestandteil des Ökosystems und wird von Apache Kafka für die Verwaltung der Cluster-Topologie, der Access Control Lists und der Controller Election verwendet.

Kafka Connect
Kafka Connect erlaubt eine flexible und skalierbare Integration von Umsystemen auf Basis von Sources und Sinks.