Pulsar CLI – Ein portabler Kommandozeilen-Client für Apache Pulsar

Pulsar CLI – Ein portabler Kommandozeilen-Client für Apache Pulsar
By Matthias Petermann / on 19.10.2025

Motivation

Bei der Arbeit mit Apache Pulsar gibt es regelmäßig Situationen, in denen man schnell auf Topics zugreifen möchte – etwa zum Debuggen, Testen oder Automatisieren von Nachrichtenflüssen. Die vorhandenen Clients und UIs sind leistungsfähig, aber oft schwergewichtig oder nicht für unkomplizierte Nutzung in der Shell optimiert.

pulsar-cli schließt diese Lücke: Ein kompaktes Kommandozeilenwerkzeug, das die grundlegenden Pulsar-Operationen direkt verfügbar macht: Reader, Consumer und Producer – ohne Setup, Container oder externe Abhängigkeiten.


Umsetzung in Go

Die Wahl fiel bewusst auf Go, da sich damit statisch gelinkte, plattformübergreifende Binaries erzeugen lassen – ein wesentlicher Vorteil für Tools, die portabel und unabhängig funktionieren sollen.

Ein einfaches Cross-Compiling genügt:

GOOS=linux   GOARCH=amd64 go build -o pulsar-cli
GOOS=darwin  GOARCH=arm64 go build -o pulsar-cli
GOOS=windows GOARCH=amd64 go build -o pulsar-cli.exe

Das Ergebnis sind eigenständige Programme für Linux, macOS und Windows – ohne Shared Libraries, ohne Laufzeitumgebung, ohne Installationsprozess. Ein Binary kopieren, Umgebungsvariablen setzen, loslegen.


Architektur und Aufbau

Das Tool folgt einem klaren Aufbau:

pulsar-cli/
├── LICENSE
├── Makefile
├── README.md
├── go.mod
└── main.go

Die gesamte Logik steckt in einer Datei (main.go). Das CLI wird über spf13/cobra implementiert und nutzt den offiziellen Pulsar-Go-Client für die Kommunikation.

Beim Start registriert das Tool drei Befehle:

  • reader – liest Nachrichten ab einem bestimmten Punkt im Topic
  • consumer – empfängt Nachrichten über eine Subscription
  • producer – sendet Nachrichten, die über stdin eingegeben werden

Die Konfiguration erfolgt ausschließlich über Umgebungsvariablen:

export PULSAR_URL=pulsar+ssl://broker.example.org:6651
export PULSAR_JWT=<token>    # optional

Beispiel: Nachrichten lesen

Mit dem Reader-Befehl können Nachrichten aus einem Topic abgerufen werden. Dabei werden Metadaten (Topic, Message ID, Timestamp) auf stderr ausgegeben, die Payload auf stdout.

pulsar-cli reader -t persistent://public/default/test

Ausgabe-Beispiel:

INFO[0000] Reading from topic persistent://public/default/test ...
INFO[0001] received message msgID=0001 publishAt=2025-10-19T20:10:00Z
{"event":"status","value":"ok"}

Damit lässt sich die Payload gezielt weiterverarbeiten:

pulsar-cli reader -t mytopic | jq '.event'

Beispiel: Nachrichten konsumieren

Der Consumer arbeitet mit einer Pulsar-Subscription und bestätigt Nachrichten automatisch nach erfolgreichem Empfang. Auch hier gilt: Logausgabe auf stderr, Nutzdaten auf stdout.

pulsar-cli consumer -t persistent://public/default/test -s demo-sub

Beispielhafte Ausgabe:

INFO[0000] Consuming from topic persistent://public/default/test with subscription demo-sub ...
INFO[0002] received message msgID=0002 publishAt=2025-10-19T20:15:04Z
{"metric":"cpu_load","value":0.23}

Die Ausgabe lässt sich direkt in Monitoring- oder Testpipelines integrieren.


Beispiel: Nachrichten senden

Der Producer liest zeilenweise Daten von stdin und sendet sie an den angegebenen Topic. Jede erfolgreich gesendete Nachricht wird mit Metadaten bestätigt.

echo '{"event":"deploy","status":"ok"}' | pulsar-cli producer -t persistent://public/default/test

Log-Ausgabe auf stderr:

INFO[0000] Producing messages to topic persistent://public/default/test (Ctrl+D to quit)
INFO[0000] sent message topic=persistent://public/default/test time=2025-10-19T20:30:00Z

So lässt sich pulsar-cli nahtlos in Skripte oder CI/CD-Prozesse integrieren – etwa als Teil automatisierter Tests, Datenfeeds oder Healthchecks.


UNIX-Best Practices

pulsar-cli folgt konsequent den klassischen UNIX-Prinzipien:

Stream Inhalt Beispiel
stdout Nutzdaten – also Nachrichten oder JSON-Content `pulsar-cli consumer …
stderr Diagnose, Status, Logging INFO[0001] received message ...

Diese Trennung erlaubt:

  • stabile Nutzung in Shell-Pipelines
  • maschinenlesbare Weiterverarbeitung
  • sauberes Logging ohne Vermischung der Datenströme

Das Verhalten orientiert sich an Tools wie curl oder jq: stdout gehört dem Inhalt, stderr der Beobachtung.


Fazit

pulsar-cli ist ein praktisches Werkzeug für alle, die Pulsar in bestehende Automatisierungs- oder Diagnoseprozesse integrieren möchten.

Ein einziges Binary genügt – kein Setup, keine Laufzeitabhängigkeiten, keine zusätzlichen Komponenten. Die CLI ist klar strukturiert, das Verhalten vorhersehbar und skriptfreundlich. Mit wenigen Zeilen Go-Code entsteht so ein Werkzeug, das Pulsar-Workflows messbar vereinfacht – schnell, portabel und transparent.

🔗 Quellcode: https://forge.ext.d2ux.net/OpenLab/pulsar-cli


Bildnachweis: Das Pulsar-Logo ist eine eingetragene Marke der Apache Software Foundation. Verwendung im Rahmen redaktioneller Berichterstattung gemäß den Marken- und Logo-Richtlinien der ASF.