Zróbmy to w kolejności :)
1 - Kiedy producent tworzy wiadomość - określi temat, do którego chce wysłać wiadomość, czy to prawda? Czy dba o partycje?
Domyślnie producent nie dba o partycjonowanie. Możesz użyć niestandardowego partycjonera, aby mieć lepszą kontrolę, ale jest to całkowicie opcjonalne.
2 - Gdy abonent działa - Czy określa swój identyfikator grupy, aby mógł być częścią klastra konsumentów o tej samej tematyce lub kilku tematach, którymi ta grupa konsumentów jest zainteresowana?
Tak, konsumenci dołączają (lub tworzą, jeśli są sami) grupę konsumentów, aby dzielić się obciążeniem. Nie ma dwóch konsumentów z tej samej grupy, które nigdy nie otrzymają tej samej wiadomości.
3 - Czy każda grupa konsumentów ma odpowiednią partycję w brokerze, czy też każdy konsument ją ma?
Ani. Wszystkim odbiorcom w grupie odbiorców przypisywany jest zestaw partycji, pod dwoma warunkami: żaden z dwóch odbiorców w tej samej grupie nie ma wspólnej partycji - a grupie odbiorców jako całości przypisuje się każdą istniejącą partycję.
4 - Czy przegrody utworzone przez brokera nie są zatem problemem dla konsumentów?
Nie są, ale na podstawie 3 widać, że posiadanie większej liczby konsumentów niż istniejących partycji jest całkowicie bezużyteczne, więc jest to maksymalny poziom równoległości do wykorzystania.
5 - Ponieważ jest to kolejka z przesunięciem dla każdej partycji, czy konsument jest odpowiedzialny za określenie, które komunikaty chce odczytać? Czy musi ratować swój stan?
Tak, konsumenci zapisują przesunięcie na temat na partycję. Jest to całkowicie obsługiwane przez Kafkę, nie martw się o to.
6 - Co się stanie, gdy wiadomość zostanie usunięta z kolejki? - Na przykład: retencja trwała 3 godziny, potem mija czas, jak obsługiwane jest przesunięcie po obu stronach?
Jeśli konsument kiedykolwiek zażąda przesunięcia niedostępnego dla partycji u brokerów (na przykład z powodu usunięcia), wchodzi w tryb błędu i ostatecznie resetuje się dla tej partycji do najnowszej lub najstarszej dostępnej wiadomości (w zależności od wartość konfiguracji auto.offset.reset) i kontynuuj pracę.