Vor KIP-62 gibt es nur session.timeout.ms
(dh Kafka 0.10.0
und früher). max.poll.interval.ms
wird über KIP-62 (Teil von Kafka 0.10.1
) eingeführt.
KIP-62 entkoppelt Herzschläge von Anrufen poll()
über einen Hintergrund-Heartbeat-Thread und ermöglicht so eine längere Verarbeitungszeit (dh eine Zeit zwischen zwei aufeinander folgenden poll()
) als das Heartbeat-Intervall.
Angenommen, die Verarbeitung einer Nachricht dauert 1 Minute. Wenn Herzschlag und Abfrage gekoppelt sind (dh vor KIP-62), müssen Sie einstellensession.timeout.ms
mehr als 1 Minute , um zu verhindern, dass der Verbraucher eine Zeitüberschreitung erleidet. Wenn der Verbraucher stirbt, dauert es auch länger als 1 Minute, um den ausgefallenen Verbraucher zu erkennen.
KIP-62 entkoppelt Polling und Heartbeat und ermöglicht das Senden von Heartbeat zwischen zwei aufeinander folgenden Polls. Jetzt werden zwei Threads ausgeführt, der Heartbeat-Thread und der Verarbeitungsthread. Daher hat KIP-62 jeweils einen Timeout eingeführt. session.timeout.ms
ist für den Heartbeat-Thread, während max.poll.interval.ms
es für den Verarbeitungsthread ist.
Angenommen, Sie legen fest session.timeout.ms=30000
, dass der Consumer-Heartbeat-Thread vor Ablauf dieser Zeit einen Heartbeat an den Broker senden muss. Wenn andererseits die Verarbeitung einer einzelnen Nachricht 1 Minute dauert, können Sie mehr max.poll.interval.ms
als eine Minute festlegen , um dem Verarbeitungsthread mehr Zeit für die Verarbeitung einer Nachricht zu geben.
Wenn der Verarbeitungsthread stirbt, muss dies max.poll.interval.ms
erkannt werden. Wenn jedoch der gesamte Verbraucher stirbt (und ein sterbender Verarbeitungsthread höchstwahrscheinlich den gesamten Verbraucher einschließlich des Heartbeat-Threads zum Absturz bringt), muss er nur session.timeout.ms
erkannt werden.
Die Idee ist, eine schnelle Erkennung eines fehlerhaften Verbrauchers zu ermöglichen, selbst wenn die Verarbeitung selbst ziemlich lange dauert.