Różnica między session.timeout.ms oraz max.poll.interval.ms dla Kafka>= 0.10.1
Nie wiem dlaczego potrzebujemy obu session.timeout.ms
i max.poll.interval.ms
i kiedy mielibyśmy użyć jednego, drugiego lub obu? Wydaje się, że oba ustawienia wskazują górną granicę czasu, w którym koordynator będzie czekał na bicie serca od konsumenta, zanim założy, że jest martwy.
Również jak to się zachowuje w wersjach 0.10.1.0 + opartych na KIP-62 ?
1 answers
Przed KIP-62 istnieje tylko session.timeout.ms
(czyli Kafka 0.10.0
i wcześniej). max.poll.interval.ms
wprowadza się za pomocą KIP-62 (część Kafka 0.10.1
).
KIP-62 oddziela heartbeats od wywołań do poll()
poprzez wątek heartbeat w tle, pozwalając na dłuższy czas przetwarzania (tj. czas między dwoma kolejnymi poll()
) niż interwał heartbeat.
Załóżmy, że przetwarzanie wiadomości zajmuje 1 minutę. Jeśli heartbeat i poll są sprzężone (czyli przed KIP-62), musisz ustawić session.timeout.ms
większe niż 1 minut, aby zapobiec konsumentowi do czasu. Jednak jeśli konsument umrze, wykrycie nieudanego konsumenta trwa dłużej niż 1 minutę.
KIP-62 oddziela sondaże i bicie serca, umożliwiając wysyłanie bicia serca między dwoma kolejnymi sondami. Teraz masz uruchomione dwa wątki, wątek heartbeat i wątek przetwarzania i tak KIP-62 wprowadził limit czasu dla każdego z nich. {[0] } jest dla wątku heartbeat, podczas gdy {[2] } jest dla wątku przetwarzania.
Zakładasz, ustawiasz session.timeout.ms=30000
, tak więc wątek pulsu konsumenta musi wysłać bicie serca do brokera przed upływem tego czasu. Z drugiej strony, jeśli przetwarzanie pojedynczej wiadomości zajmuje 1 minutę, możesz ustawić max.poll.interval.ms
większą niż jedna minuta, aby dać wątkowi przetwarzającemu więcej czasu na przetworzenie wiadomości.
Jeśli wątek przetwarzania umrze, trzeba max.poll.interval.ms
, aby to wykryć. Jeśli jednak umiera cały konsument (a umierający wątek przetwarzania najprawdopodobniej zawiesza całego konsumenta, w tym wątek bicia serca), trwa to tylko session.timeout.ms
aby go wykryć.
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
2019-08-01 01:52:07