Jakiś czas temu, postanowiłem sobie w ramach treningu napisać minimalistycznego Kafka brokera w Javie, opierając się na głównie na tym dokumencie. Spoiler - brakuje tam wielu informacji :) Po wielu bojach osiągnąłem stan, gdzie konsumenci są w stanie odbierać wiadomości od producentów a także organizować się w consumer grupy.
Postanowiłem że będę używał tego brokera jako toola do testów integracyjnych w innych projektach, bo zawsze irytował mnie Springowy EmbeddedKafkaBroker
i różne nakładki na niego. Przy testach mojej aplikacji nie interesuje mnie puszczanie pełnego klastra z Zookeeperem i rzeczy takie jak replikacja, a bardziej wysyłanie / odbieranie rekordów.
Dokładnych pomiarów nie robiłem ale podejrzewam że mój broker może być szybszy przy starcie / stopie (przy modelu gdzie startujemy brokera raz i wysyłamy mnóstwo requestów pewnie embedded kafka wygra ze względu na różnorakie optymalizacje).
Na razie jest to ciągle ekperyment, ale zapraszam do zapoznania się, gdyby kogoś to zainteresowało (z docsów na razie jest tylko bieda-readme):
https://github.com/dmcodev/kafka-test-broker
Apache Kafka: A Distributed Streaming Platform.
@Charles_Ray: raczej chciałbym żeby była lżejsza alternatywa niż embedded Kafka czy używanie dockera - tak jak np. H2 jest alternatywą do używania Postgresa przez testcontainers (zakładając że nie trzymamy się standardowego SQL)
Przeglądając ten temat zaciekawiła mnie jedna kwestia. W Javie w klasach wewnętrznych niestatycznych nie można mieć pól static
, które nie są stałymi czasu kompilacji - raczej nic w tym dziwnego, bo mają one mały sens.
Chciałem się przekonać, czy można za pomocą modyfikacji bytecode takie pole jednak dodać i czy runtime nie będzie miał nic przeciwko :) Okazuje się, że jak najbardziej tak, wrzuciłem przykład na githuba:
@Shalom: sprawdziłem i według specyfikacji JVM nazwą klasy może być w zasadzie dowolny string UTF-8 :) https://docs.oracle.com/javase/specs/jvms/se14/html/jvms-4.html#jvms-4.2.1
@damianem: tak, na poziomie JVMa, ale juz nie na poziomie kompilatora javy ;)
Sprawdź dokumentację ExecutorFilter dla Twojej wersji - np. tutaj jest sekcja "Event...
Sprawdź dokumentację ExecutorFilter dla Twojej wersji - np. tutaj jest sekcja "Event...
Sprawdź dokumentację ExecutorFilter dla Twojej wersji - np. tutaj jest sekcja "Event...
Sprawdź dokumentację ExecutorFilter dla Twojej wersji - np. tutaj jest sekcja "Event...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Serwis A zmienia coś w bazie -> publikacja eventu na topic message brokera z użyciem...
Rywalizujesz z https://www.testcontainers.org/modules/kafka/ :)