Apache Kafka – system kolejkowy dla każdego

Apache Kafka jest jednym z wielu popularnych message brokerów. Spośród dostępnych rozwiązań wyróżnia go wysoka wydajność. Jest łatwo skalowalny i odporny na awarie. Jest również przyjazny dla developera, nie ma potrzeby odpalania całego klastra, wystarczy jedna instancja, która może być na lokalnym środowisku. Kafka przechowuje strumienie komunikatów w kolekcjach zwanych topic’ami.

Charakterystyczną cechą jest to ze wiadomości w topicu są trzymane w kolejności chronologicznej, od najstarszego do najmłodszego. Oznacza to że każda nowa trafia na koniec. Nie ma ograniczenia ilości dostępnych topic’ów w klastrze, jednak autorzy zalecają mniejszą ilość ale większych aby zapewnić wysoką wydajnośc. Trzeba być świadomym że każdy topic zajmuje co najmniej jedną partycję a w przypadku dużych topiców nie mieszczących się na jednej maszynie, może to być kilka partycji co w połączeniu z włączoną replikacją (zwiększającą bezpieczeństwo danych) znacząco zwiększa ich ilość. Warto wspomnieć że twórcy przeprowadzają testy wydajnościowe klastra z 10k partycji i nie dają gwarancji na poprawne działanie powyżej tej granicy. Jeśli uda Ci się postawić coś większego na produkcji i będzie działać, daj im znać, na pewno trafisz na pierwszą pozycję use casów 😉

Zapis do topica jest bardzo prosty. Każdy nowy komunikat trafia na koniec kolejki. Domyślnie komunikaty nie są usuwane z kolejki, ale istnieje możliwość ustawienia TTL tak aby broker zarządzał za nas usuwaniem starych. W przypadku gdy występuje partycjonowanie to producent jest odpowiedzialny za wybór partycji do której będzie zapisywał. Popularne jest stosowanie algorytmu round-robin w celu równomiernego obciążenia.

Podczas odczytu każdy konsument jest odpowiedzialny za zapamiętywanie offsetu, czyli pozycji ostatnio odczytanego komunikatu.  Dodatkowo klient łącząc się po raz pierwszy do topica w celu odczytu ignoruje wszystkie istniejące komunikaty i odczytuje dopiero nowo przychodzące. Oczywiście jest to domyślne zachowanie które można konfigurować tak aby możliwy był odczyt starszych komunikatów.

Należy pamiętać że Kafka nie powinna być dostępna dla klientów z zewnętrznej sieci ze względów bezpieczeństwa. Nie doczekała się jeszcze security 😉 Tak więc zawsze uruchamiajmy ją w sieci wewnętrznej, a jeśli potrzebujemy mieć dostęp z zewnątrz zapewniajmy go np przez klienta RESTowego który będzie odpowiednio zabezpieczony.

To by było na tyle wstępu teoretycznego, przejdźmy do uruchomienia Kafki. Na początek pobieramy paczkę stąd.  Rozpakowujemy i po przejściu do katalogu uruchamiamy kolejno:

W pierwszej kolejności uruchamiany jest Apache Zookeeper który zarządza klastrem. Jako parametr podana jest ścieżka do pliku konfiguracyjnego, którego nie musimy początkowo zmieniać, domyślna konfiguracja pozwala na szybki start. W kolejnym kroku odpala się serwer Kafki i już po chwili możemy z niego w pełni korzystać. Istnieje możliwość manualnego stworzenia nowego topic’a poleceniem :

ale nie jest to wymagane przed skorzystaniem z niego, ponieważ Kafka tworzy nieistniejące jeszcze topic’i w momencie pierwszego zapisu.

Listę istniejących topiców otrzymamy po wywołaniu polecenia:

Jeśli temat zainteresował i czujesz niedosyt odsyłam do dokumentacji dostępnej na: https://kafka.apache.org/, a już niebawem o tym jak zapisać do/odczytać z Kafki w Javie;)

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *