pocketkafka
PocketKafka: broker kompatibel Kafka dalam satu binary Go tanpa dependency
Broker event streaming yang diimplementasikan mulai dari protokol wire, dikemas sebagai satu binary statis yang juga membawa web UI, schema registry, serta gateway REST dan MQTT.
- Peran
- Proyek solo. Implementasi protokol, storage engine, gateway, CLI, dan test suite.
- Stack
- Go 1.26
- Kafka wire protocol
- MQTT 3.1.1
- Prometheus
- Docker
- Producer
- Broker :9092
- Partitioned log
- Group coordinator
- Consumer
Dibaca dari kiri ke kanan: tiap tahap memberi masukan ke tahap berikutnya. Bagian naratif di bawah menjelaskan pipeline yang sama secara lengkap.
Masalah
- Menjalankan Kafka untuk integrasi industri berskala kecil berarti mengoperasikan broker JVM plus schema registry terpisah, REST proxy, dan MQTT bridge untuk telemetri sensor.
- Setiap komponen tambahan menambah memori, ukuran image, dan satu lagi layanan yang harus dimonitor. Ini paling terasa di host edge yang terbatas.
Batasan
- Tanpa modul Go pihak ketiga. Dari encoding protokol sampai storage engine ditulis dengan standard library, sehingga dependency graph tetap kosong.
- Klien Kafka yang sudah ada harus tetap bekerja. Ini menghilangkan opsi membuat protokol baru dan memaksa implementasi mengikuti format wire Kafka.
- Satu binary statis adalah unit deployment, jadi aset web UI di-embed dan tidak dilayani dari container terpisah.
Arsitektur dan aliran data
- Broker mendengarkan port 9092 untuk protokol wire Kafka, dengan listener internal di 29092 untuk lalu lintas antar container.
- Tiga layanan berjalan di dalam proses yang sama: web UI di 8080, schema registry kompatibel Confluent di 8081, dan HTTP REST proxy di 8082.
- MQTT bridge 3.1.1 di 1883 menerima telemetri IoT dan menaruhnya ke topik Kafka. Lalu lintasnya tampil di live tail web UI yang sama dengan pesan Kafka.
- Storage, koordinasi consumer group, dan schema registry adalah paket internal terpisah (internal/storage, internal/coordinator, internal/schemaregistry), bukan satu blok gabungan.
- Metrics Prometheus dan health probe bergaya Kubernetes dilayani dari listener web.
Keputusan engineering
- Storage engine log ditulis khusus alih-alih memakai library yang sudah ada, karena build tanpa dependency memang tujuan proyeknya.
- Retention, log compaction, idempotence, dan tiered storage masing-masing punya implementasi dan file test sendiri, sehingga jaminannya dipatok oleh test, bukan diklaim di dokumentasi.
- Tiered storage memindahkan segmen dingin ke endpoint S3 atau MinIO dan mati secara default, sehingga deployment bawaan tetap mandiri.
- Timeout session, rebalance, dan heartbeat consumer group menjadi konfigurasi, bukan konstanta, dan offset bisa disimpan di memori atau di disk.
- CLI admin (cmd/kctl) mendukung output JSON sehingga operasi topik dan consumer group bisa diskrip di CI.
Pengujian dan verifikasi
- Lima belas file test Go mencakup encoding protokol dan kompresi, record batch, perilaku partisi, log compaction, idempotence, tiered storage, SASL dan SCRAM, gateway REST dan MQTT, serta auth web.
- Cakupan end-to-end ada di internal/e2e sebagai suite dasar dan suite fitur.
- CI menjalankan go build ./..., go vet ./... dan go test ./... pada setiap push dan pull request, dan run terakhir di branch master hijau.
Yang terbukti saat ini
- Build-nya benar-benar tanpa dependency: go.mod hanya mendeklarasikan path module dan versi Go.
- Permukaan yang sudah diimplementasikan saat ini hijau di bawah vet dan seluruh test suite.
- Yang tidak diklaim: tidak ada pengukuran throughput, latensi, memori, atau ukuran image yang dipublikasikan, jadi tidak ada yang dicantumkan di sini. README juga mendokumentasikan listener TLS yang tidak punya padanan di contoh konfigurasi, dan klaim itu ikut dihilangkan.
Source dan referensi
Setiap klaim di halaman ini dapat dilacak ke repositori publik, test, atau hasil build-nya. Angka yang tidak terbukti sengaja tidak dicantumkan.