Zrozumienie tematów i partycji Kafki

Zaczynam się uczyć Kafki dla potrzeb rozwiązań korporacyjnych.

Podczas moich odczytów, przyszło mi do głowy kilka pytań:

  1. gdy producent produkuje wiadomość-określi temat, do którego chce wysłać wiadomość, prawda? Czy zależy mu na partycjach?
  2. gdy abonent jest uruchomiony-czy określa swój identyfikator grupy, aby mógł być częścią klastra konsumentów o tym samym temacie lub kilku tematach, które ta grupa konsumentów jest zainteresowany?
  3. Czy każda grupa konsumentów ma odpowiednią partycję na brokerze, czy też każdy konsument ma taką?

  4. Jak partycje utworzone przez brokera, więc nie troska o konsumentów?

  5. Ponieważ jest to kolejka z przesunięciem dla każdej partycji, czy obowiązkiem konsumenta jest określenie, które wiadomości chce odczytać? Czy musi ratować swój stan?

  6. Co się stanie, gdy wiadomość zostanie usunięta z Kolejka? - Na przykład: retencja była przez 3 godziny, a następnie czas mija, w jaki sposób przesunięcie jest obsługiwane po obu stronach?

Author: mrsrinivas, 2016-06-25

3 answers

Weźmy je w kolejności:)

1 - gdy producent produkuje wiadomość-określi temat, do którego chce wysłać wiadomość, prawda? Czy zależy mu na partycjach?

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 jest uruchomiony-czy określa swój identyfikator grupy, aby mógł być częścią grupy 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ć obciążenie. Żaden z dwóch konsumentów w tej samej grupie nigdy nie otrzyma tej samej wiadomości.


3-czy każda grupa konsumentów ma odpowiednią partycję na brokerze, czy też każdy konsument ma taką?

Żadne. Wszystkim konsumentom w grupie konsumentów przypisany jest zestaw partycje, pod dwoma warunkami: nie ma dwóch konsumentów w tej samej grupie, które mają wspólną partycję - a grupie konsumentów jako całości przypisana jest każda istniejąca partycja.


4 - czy partycje tworzone przez brokera nie są zatem problemem dla konsumentów?

Nie są, ale widać z 3, że całkowicie bezużyteczne jest posiadanie większej liczby konsumentów niż istniejące partycje, więc jest to maksymalny poziom równoległości dla konsumpcji.


5 - Ponieważ jest to kolejka z przesunięciem dla każdej partycji, czy obowiązkiem konsumenta jest określenie, które wiadomości chce odczytać? Czy musi ratować swój stan?

Tak, konsumenci zapisują przesunięcie na temat na partycję. To jest całkowicie obsługiwane przez Kafka, nie martw się o to.


6 - co się stanie, gdy wiadomość zostanie usunięta z kolejki? - Na przykład: retencja była na 3 godziny, następnie czas mija, jak jest obsługiwane offset na obu boki?

Jeśli konsument kiedykolwiek zażąda przesunięcia niedostępnego dla partycji u brokerów (na przykład z powodu usunięcia), przechodzi w tryb błędu i ostatecznie resetuje się dla tej partycji do najnowszej lub najstarszej dostępnej wiadomości (w zależności od auto.przesunięcie.Resetuj wartość konfiguracji) i kontynuuj pracę.

 66
Author: C4stor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-05 14:34:49

Ten post ma już zaakceptowaną odpowiedź, ale dodaję mój pogląd z kilkoma zdjęciami z Kafka Definitive Guide

Zanim odpowiemy na każde pytanie, dodajmy przegląd komponentów producenta

przegląd komponentów producenta

1. Kiedy producent produkuje wiadomość-określi temat, do którego chce wysłać wiadomość, prawda? Czy zależy mu na partycjach?

Producent zdecyduje docelową partycję, aby umieścić dowolny wiadomość zależy od

  • identyfikator partycji, jeśli jest określony Komunikatem
  • klucz % num partycji, jeśli nie podano identyfikatora partycji
  • round robin jeśli nie ma identyfikatora partycji ani klucza wiadomości dostępnego w wiadomości, oznacza tylko wartość

2. Gdy abonent jest uruchomiony-czy określa swój identyfikator grupy, aby mógł być częścią klastra konsumentów o tym samym temacie lub kilku tematach, które ta grupa konsumentów jest zainteresowany?

Należy zawsze skonfigurować group.id chyba że używasz API simple assignment i nie musisz przechowywać offsetów w Kafka. Nie będzie częścią żadnej grupy. źródło

3. Czy każda grupa konsumentów ma odpowiednią partycję na brokerze, czy też każdy konsument ma taką?

W jednej grupie konsumenckiej każda partycja będzie przetwarzana tylko przez jednego konsumenta . Są to możliwe scenariusze

  • liczba konsumentów mniej niż liczba partycji tematycznych wtedy można przypisać wiele partycji do jednego z konsumentów w grupie liczba konsumentów mniejsza niż partycje tematyczne
  • liczba konsumentów to samo jak liczba partycji tematycznych, wtedy mapowanie partycji i konsumentów może być jak poniżej, liczba konsumentów taka sama jak liczba partycji tematycznych
  • liczba konsumentów więcej niż liczba partycji tematycznych, wtedy mapowanie partycji i konsumentów może być jak poniżej, Nie skuteczne, sprawdź Konsument 5 liczba konsumentów więcej niż liczba partycji tematycznych

4. Jak partycje utworzone przez brokera, więc nie troska o konsumentów?

Konsument powinien być świadomy liczby partycji, jak omówiliśmy w pytaniu 3.

5. Ponieważ jest to kolejka z przesunięciem dla każdej partycji, czy obowiązkiem konsumenta jest określenie, które wiadomości chce odczytać? Czy musi ratować swój stan?

Kafka zajmuje się offsetem państwa poprzez wysłanie wiadomości do specjalnego __konsument_offsety topic, to zachowanie może być konfigurowalne do manual również przez enable.auto.commit do false. W takim przypadku consumer.commitSync() i consumer.commitAsync() mogą być pomocne w zarządzaniu offsetem.

6. Co się stanie, gdy wiadomość zostanie usunięta z kolejki? - Na przykład: retencja była przez 3 godziny, a następnie czas mija, w jaki sposób przesunięcie jest obsługiwane po obu stronach?

Jeśli konsument rozpoczyna po okresie przechowywania, wiadomości będą używane zgodnie z konfiguracją auto.offset.reset, która może być latest/earliest. technicznie jest to latest (zacznij przetwarzać nowe wiadomości), ponieważ wszystkie wiadomości wygasły w tym czasie i retention jest konfiguracją na poziomie tematu.

 10
Author: mrsrinivas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 13:49:21

Kafka używa tematu koncepcji, która sprowadza porządek do przepływu wiadomości.

Aby zrównoważyć obciążenie, temat może być podzielony na wiele partycji i powielany między brokerami.

Partycje są uporządkowanymi, niezmiennymi sekwencjami komunikatów, które są stale dołączane, np.

Wiadomości na partycji mają sekwencyjny numer id, który jednoznacznie identyfikuje każdą wiadomość wewnątrz partycji.

Partycje pozwalają na skalowanie dziennika tematu poza rozmiar, który zmieści się na jednym serwerze (brokerze) i będzie działać jako jednostka równoległości.

Partycje tematu są dystrybuowane przez brokerów w klastrze Kafka, gdzie każdy broker obsługuje Dane i żąda udziału partycji.

Każda partycja jest replikowana przez konfigurowalną liczbę brokerów, aby zapewnić tolerancję błędów.

Dobrze wyjaśnione w tym artykule: http://codeflex.co/what-is-apache-kafka/

 7
Author: Yuri Bondarenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-06 03:09:02