author-avatar
Dominik Martyniak
Source Available 8 minut

Devset CE - mój weekendowy projekt do Kafki i RabbitMQ, który urósł i właśnie go otwieram

Od ponad roku dłubię w wolnych chwilach przy narzędziu do testowania message brokerów. Zaczęło się od tego, że miałem dość pisania tych samych skryptów do Kafki w kółko. Skończyło się tak, że projekt mnie wciągnął bardziej niż się spodziewałem - i teraz wrzucam go na GitHuba, bo szkoda żeby leżał tylko u mnie na dysku.


Skąd to się wzięło

W pracy dużo siedzę przy Kafce i RabbitMQ. I za każdym razem kiedy chciałem coś przetestować — wysłać wiadomość, sprawdzić co dotarło, powtórzyć z innym payloadem - kończyło się tak samo. Terminal, skrypt, JSON, console producer, scrollowanie historii bo nie pamiętam co wkleiłem wczoraj.

Są narzędzia do Kafki - Kafdrop, AKHQ, Conduktor, Offset Explorer. Do RabbitMQ jest Management UI. Ale to są głównie narzędzia do podglądu i administracji. Żadne nie robi tego, czego ja potrzebowałem: usiąść, zdefiniować wiadomość, wysłać, zobaczyć co się dzieje, zapisać to żebym jutro nie szukał po historii terminala.

No to zacząłem sobie pisać. Najpierw w JavaFX, bo akurat miałem ochotę pobawić się desktopem. Apka działała, ale za każdym razem kiedy chciałem ruszyć UI, walczyłem z layoutem zamiast z logiką. W końcu siadłem i przepisałem to od zera na Spring Boot i Reacta - bo na webie po prostu szybciej mi się robi UI.


I tu się zaczęło dziać

Bo wiesz jak to jest z projektami po godzinach. Założenie było proste: ma wysyłać wiadomości. Tyle. A potem któregoś wieczoru pomyślałem „a fajnie byłoby móc ułożyć sekwencję" - i tak powstał wizualny edytor workflow'ów. Drag-and-drop, pętle, warunki, cała zabawa. Pod spodem DSL, który kompiluje się do planu wykonania.

Potem doszedł rejestr schematów, bo ręczne wklejanie tych samych Protobufów mnie męczyło. Live podgląd topików Kafki przez WebSocket, bo już miałem WebSockety w stacku. Integracja z MongoDB, bo do testowych wiadomości i tak ciągnąłem dane z bazy. Playground do suchego przebiegu workflow'a, bo nie chciało mi się czekać aż faktycznie wszystko poleci na brokera.

Każdy z tych ficzerów dochodził „przy okazji", bo akurat miałem wieczór i mi pasowało. W pewnym momencie spojrzałem na to wszystko razem i pomyślałem - kurde, to już nie jest skrypt-na-kolanie. To jest coś, czego ja sam używam codziennie w pracy. I że pewnie nie jestem jedynym, którego męczy klepanie tych samych skryptów do Kafki w terminalu.


Co to konkretnie umie

Odpalasz docker-compose up, otwierasz localhost:8082 i masz:

  • Wysyłanie wiadomości na Kafkę i RabbitMQ - JSON albo Protobuf, headery, klucz partycjonowania, schemat z rejestru. Historia zostaje zapisana, możesz powtórzyć jednym kliknięciem.
  • Wizualny edytor workflow'ów - drag-and-drop na canvasie. Sekwencje wiadomości, pętle (powtórz 10 razy), warunki (jeśli X to Y), opóźnienia, transformacje payloadu. Uruchamiasz, patrzysz jak leci, wyniki w panelu Workflow Runs.
  • Live podgląd topików Kafki - podłączasz się przez WebSocket, wybierasz offset i widzisz co leci, na żywo, w przeglądarce.
  • Rejestr schematów - JSON i Protobuf, z dynamiczną kompilacją deskryptorów proto w runtime.
  • Integracja z MongoDB - podgląd schematów kolekcji, zapytania do bazy jako krok w workflow (np. pobierz dokument, użyj jako payload kolejnej wiadomości).
  • Playground - suchy przebieg workflow'a przed odpaleniem na prawdziwym brokerze.

Wszystko lokalnie, dane nie opuszczają komputera. Devset trzyma swoją konfigurację i historię w SQLite — jeden plik, zero administracji. Nie trzeba Postgresa ani niczego z zewnątrz.


Stack

devset-ce/
├── devset-ce-be/    ← Java 25, Spring Boot 3.5, SQLite, Kafka, RabbitMQ, MongoDB
├── devset-ce-fe/    ← React 19, TypeScript 5.9, Vite 8, Tailwind
├── landing-page/    ← Statyczna strona
└── docker-compose.yml  ← Devset + Kafka + RabbitMQ, jedno polecenie

Jeden JAR, jeden port, SQLite w jednym pliku. Backend serwuje frontend jako pliki statyczne. docker-compose up stawia całość razem z Kafką i RabbitMQ gotowymi do podłączenia.

Licencja FSL-1.1-Apache-2.0. Wybrałem FSL bo chciałem mieć kod publicznie od dnia zero, ale bez sytuacji w której ktoś jutro odpala to jako swój SaaS. Po dwóch latach każda wersja i tak konwertuje się do Apache 2.0, więc długoterminowo projekt jest w pełni otwarty.


Co bym jeszcze chciał zrobić

Bo to nadal projekt po godzinach, więc roadmapa to bardziej lista rzeczy, które mnie korcą, niż plan z deadline'ami:

  • Kolejne brokery - Kafka i RabbitMQ działają, ale chciałbym dotknąć NATS-a i Pulsara. Na razie sam pomysł.
  • Postgres connector - MongoDB jest, Postgres byłby naturalnym następnym krokiem. Sam bym tego używał, więc pewnie tym się zajmę najpierw.
  • Workflow debugger - step-by-step po krokach workflow z podglądem stanu między nimi. Wiem mniej więcej jak chcę to zrobić, jeszcze nie zacząłem.
  • Import/eksport workflow'ów - żeby dało się wrzucić workflow do repo albo wysłać komuś. Pytanie tylko czy YAML, JSON, czy własny format — jeszcze sam nie wiem.
  • Testy e2e na froncie - backend jest dobrze pokryty Testcontainersami, front czeka na Playwrighta. Niewdzięczna robota, ale kiedyś trzeba.

Jak odpalić

Trzy linijki:

git clone https://github.com/devset-io/devset-ce
cd devset-ce
docker-compose up

Potem http://localhost:8082 w przeglądarce. Kafka i RabbitMQ stoją obok w kontenerach, gotowe do podłączenia z UI.

Repo: github.com/devset-io/devset-ce. Jeśli odpalisz i coś nie zagra — albo masz pomysł co by się przydało — wal śmiało w issues. To projekt po godzinach, więc nie obiecuję że odpowiem natychmiast, ale czytam wszystko.

1
[source available]

Więcej od Dominik Martyniak

Więcej artykułów