No description
| pb | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| Makefile | ||
| README.md | ||
minipulsar – Minimal Pulsar-kompatibler PoC-Broker
Ziel: Ein bewusst minimalistischer Apache-Pulsar-kompatibler Broker in Go für lokale Tests, Experimente und Protokoll-Inspection – kein Ersatz für einen echten Pulsar-Cluster.
Features (bewusst stark reduziert)
- Pulsar-Binärprotokoll über TCP (Standard-Port
:6650) - Unterstützte Commands:
CONNECT/CONNECTEDPARTITIONED_METADATA/PARTITIONED_METADATA_RESPONSE(immer 0 Partitionen)LOOKUP/LOOKUP_RESPONSE(CommandLookupTopic, redirectet auf sich selbst)PRODUCER/PRODUCER_SUCCESSSEND/SEND_RECEIPTSUBSCRIBE/SUCCESSFLOW/MESSAGEACK(nur Logging)PING/PONG
- Persistenz:
- SQLite-Log pro Topic in Tabelle
messages - Sehr einfache Offsets pro Consumer (In-Memory, ab Start-ID 1)
- SQLite-Log pro Topic in Tabelle
- Kein:
- Authentifizierung
- TLS
- Partitions (wir tun so, als wäre alles „non-partitioned“)
- Schema-Registry
- Transactions
- Topic-Migration
- DLQ, Retention, Policies etc.
Aufbau
pb/PulsarApi.proto- Vollständige Pulsar-Protokolldefinition (Apache 2.0, mit
go_package-Option) - Wird per
protoc-gen-gonachpb/PulsarApi.pb.gogeneriert
- Vollständige Pulsar-Protokolldefinition (Apache 2.0, mit
main.go- Implementiert einen minimalen Broker mit:
- TCP-Server
- Protokoll-Decoder
- SQLite-Persistenz
- Einfachen Handlern für die wichtigsten Commands
- Implementiert einen minimalen Broker mit:
Voraussetzungen
- Go >= 1.21
protoc+protoc-gen-goimPATH
Beispielinstallation für das Go-Plugin:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
export PATH="$PATH:$HOME/go/bin"
Build
make generate # erzeugt pb/PulsarApi.pb.go aus pb/PulsarApi.proto
make # ruft generate + go build ./... auf
Der Broker liegt anschließend z. B. unter:
./minipulsar
Start
./minipulsar -addr :6650 -db ./minipulsar.db
-addr– Listen-Adresse für das Pulsar-Binärprotokoll-db– Pfad zur SQLite-Datei (wird bei Bedarf erzeugt)
Kompatibilität
Getestet ist der Broker darauf ausgelegt, mit einem normalen Pulsar-Go-Client zu sprechen. Typischer Ablauf:
- Client:
PARTITIONED_METADATA→ Broker:PARTITIONED_METADATA_RESPONSE(0 Partitionen) - Client:
LOOKUP(CommandLookupTopic) → Broker:LOOKUP_RESPONSEmitConnectaufpulsar://localhost:6650 - Client:
CONNECT→ Broker:CONNECTED - Client:
PRODUCER→ Broker:PRODUCER_SUCCESS - Client:
SEND→ Broker:- speichert Message in SQLite
- antwortet mit
SEND_RECEIPT
- Client:
SUBSCRIBE→ Broker:SUCCESS - Client:
FLOW→ Broker: liefert Messages alsMESSAGE-Frames - Client:
ACK→ Broker: loggt, ändert aber keine Offsets - Client/Broker:
PING/PONG
Für ernsthaften Einsatz brauchst du selbstverständlich einen echten Pulsar-Broker. Dieses Projekt ist eine Lern- und Testplattform.