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 Topicconsumer– empfängt Nachrichten über eine Subscriptionproducer– sendet Nachrichten, die überstdineingegeben 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.