消費者抵消管理和容錯
KafkaConsumers 通過呼叫 poll()
向 Kafka 經紀人請求訊息,並通過抵消跟蹤他們的進度 ** 。每個主題的每個分割槽內的每條訊息都有一個所謂的偏移分配 - 它在分割槽內的邏輯序列號。KafkaConsumer
跟蹤分配給它的每個分割槽的當前偏移量。請注意,卡夫卡經紀人並不瞭解消費者目前的抵消情況。因此,在 poll()
上,消費者需要將其當前的偏移傳送給代理,使得代理可以返回相應的訊息,即,。連續偏移量較大的訊息。例如,假設我們有一個分割槽主題和一個具有當前偏移量 5 的消費者。在 poll()
上,消費者向代理髮送偏移量,並且代理返回訊息 6,7,8,…
由於消費者自己跟蹤他們的抵消,如果消費者失敗,這些資訊可能會丟失。因此,必須可靠地儲存偏移,使得在重新啟動時,消費者可以在其離開的地方拾取其舊的偏移和消費者。在 Kafka 中,通過偏移提交有內建的支援 ** 。新的 KafkaConsumer
可以將其當前的偏移量提交給 Kafka,Kafka 將這些偏移量儲存在名為 __consumer_offsets
的特殊主題中。在 Kafka 主題中儲存偏移不僅僅是容錯的,而且允許在重新平衡期間將分割槽重新分配給其他使用者。由於消費者組的所有消費者都可以訪問所有分割槽的所有已提交的偏移量,因此在重新平衡時,獲取新分割槽的消費者只會從 __consumer_offsets
主題讀取此分割槽的已提交偏移量,並恢復舊消費者離開的位置。