Kafka Cluster für die Mobiliar

Benjamin Bühlmann

In Zusammenarbeit mit der Mobiliar stellte Puzzle einen Kafka Cluster als Basis für Messaging und Streaming Use Cases bereit.

Ausgangslage

Ziel war es einen Kafka Cluster als Basis für Messaging und Streaming Use Cases in Entwicklung, Test und Produktion Umgebungen bereitzustellen. Die Funktionalität basiert auf den Open Source und Community Features einer Confluent Kafka Distribution, welche mit sinnvollen Zusatzkomponenten für den sicheren Betrieb ergänzt wurde. Zudem ist das Setup vollständig high available in die Mobiliar Cloud-Plattform, Tool- und Service-Landschaft sowie in den Richtlinien integriert.

Lösung/Projekt

Die heutige Lösung besteht aus einer ausgewählten Palette von Technologien und Tools basierend auf FOSS (Free Open Source Software). Die Messaging und Streaming Plattform wird vollständig in Docker Containern auf mehreren Kubernetes Clustern betrieben. Die Integration in die PKI der Mobiliar erfolgt über Client Zertifikate. Die Autorisierung und Isolation zwischen Applikationen ist mittels prefixed Wildcard Access Control Lists umgesetzt, welche in ZooKeeper persistent abgelegt werden. Monitoring und Alerting wurde in die bestehende Infrastruktur (Grafana, Prometheus) integriert.

Die Zertifikatsverwaltung erfolgt automatisiert über Helm und den Crypto-Funktionalitäten, welche die Sprig [1] Library mit sich bringt.

Das Ausrollen von neuen Kafka Clustern und Releases erfolgt via CI/CD Pipelines mittels Helm als Paketierungsmanager. Pipelines werden ebenfalls für das Bauen von angepassten Docker Images eingesetzt.

Testservices überwachen den aktuellen Status des Clusters mittels automatisierten end-to-end Tests, welche durch die Mobiliar entwickelt wurden.

Die Rolle von Puzzle ITC

  • Definieren der Architektur der Plattform und deren Ökosystem
  • Aufbau und Engineering der Messaging und Streaming Plattform
  • Integration des Ökosystem in die Systemlandschaft und PKI der Mobiliar
  • Integration der Plattform in die bestehende Monitoring und Alerting Infrastruktur
  • Erarbeiten, Testen und Dokumentieren von Betrieblichen- und Fehlerszenarien
  • Evaluation, Testing und Durchführen von Performancemessungen von verschiedenen Storage Lösungen
  • Umsetzung PoC zur Integration von Mainframe Applikationen via Change data capture (CDC) gegen eine IBM DB2
  • Automatisierung mittels Pipelines
  • Automatisierung des Zertifikatsmanagement via Helm
  • Definieren der relevanten Monitoring Metriken und deren Visualisierung
  • Umsetzung von Alerting über verschiedene Channels
  • Koordination mit verschiedenen Stakeholder
  • Onboarding des Betriebsteams
  • Evaluation von verschiedenen Kafka as a Service Lösungen
  • 3rd Level Support

Tech Stack

Die Basis des verwendeten Ökosystem bilden die Open Source Komponenten von Confluent. Confluent ist der wesentliche Treiber hinter der Weiterentwicklung von Apache Kafka und wurde durch die ursprünglichen Erfinder von Kafka bei LinkedIn gegründet.

Apache Kafka
Als Basis für die Plattform kommt eine erweiterte Version der frei verfügbaren Kafka Distribution von Confluent 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 die Controller Election verwendet.

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

Schema Registry
Als Schema Registry kommt die Lösung von Confluent zum Einsatz. Zur Zeit arbeitet diese ausschliesslich mit Apache Avro als Serialisierungsprotokoll. In Zukunft soll auch Protocol Buffers von Google unterstützt werden. Die Open Source Variante der Confluent Schema-Registry unterscheidet sich in fehlender Security, die manuell bereitgestellt werden muss.

Yahoo Kafka Manager
Die – ursprünglich von Yahoo bereitgestellte – Web-Oberfläche ermöglicht die Verwaltung von Brokern, Topics, Partitions und Consumer(-Groups). Das Webinterface scheint auf den ersten Blick etwas veraltet, jedoch wird das Projekt auf GitHub durch mehrere aktive Committer weiterentwickelt, und eignet sich gut als für das Management des Clusters. Als netten Benefit, stellt der Kafka Manager auch die Consumer Lags pro Partition an.

Prometheus & Grafana
Die Prometheus-Integration und verschiedene Grafana-Dashboards dienen als Werkzeug für die Betriebs-Überwachung und das Alerting.

Maintenance
Die nötige Funktionalität für die Verwaltung eines Kafka-Cluster stellen die CLI-Tools von Apache Kafka bereits zur Verfügung. Zugegeben, die CLI-Tools sind nicht für alle Fälle und Operationen besonders praktikabel (bspw. das Verschieben von Partitionen zwischen Brokern). Als Fallback taugen diese aber allemal. Wir setzen eine optimierte Variante des cp-kafka Docker Images als Maintenance-Werkzeug ein. Die konventionellen CLI Tools werden mit KafkaCat ergänzt.

Burry
Dient als Backup- und Restore-Lösung der ZooKeeper Daten.

Kubernetes
Als Container Orchestrator kommt bei der Mobiliar Kubernetes zum Einsatz. Kafka und dessen Ökosystem wird vollständig in Containern auf Basis von Docker in verschiedenen On-Premises Kubernetes Clustern betrieben.

Helm
Helm ist ein Package Manager für Kubernetes welcher den Lifecycle von Applikationen erleichtert. Die Definitionen und Konfigurationen der Komponenten aus dem Kafka Ökosystem werden in sogenannten Charts definiert. Via Helm und dessen Backend Tiller werden die Applikationen installiert, aktualisiert und gelöscht.


1. Functions für Go Templates: https://masterminds.github.io/sprig