[英]Can we lose messages in Kafka Streams if we add new partitions?
[英]Can we lose kafka message in case of poweroff?
我有一個關於Kafka過程如何失敗的理論問題。 假設我們只有1個分區和2個使用者。 我知道這種情況不太可能發生,但是例如,我真的想更好地理解它。 我啟用了自動提交功能,並啟用了一點提交間隔。
分區是:
P: M1, M2, M3
其中M1,M2和M3是偏移量為(1、2、3)的消息。
假設以下內容:
T1: M1, M2 - failed
T2: M3
這意味着工作程序(線程)1獲得了M1並成功處理了它,但是在處理M2時失敗了。 例如,關機或某些硬件問題。 但是它在失敗之前已經提交了偏移量2(順便說一句-這可能嗎?)。 線程2獲得了M3,成功處理了它,並提交了偏移量3。
結果,我們丟失了M2消息。 問題–這可能嗎? 如果問題很明顯,請提前抱歉。
引用這篇出色的文章:
在開始有關一致性和可用性的討論之前,請記住,只要您對一個分區進行生產並從一個分區進行消耗,這些保證就成立。 如果您使用兩個使用者從同一分區讀取或使用兩個生產者寫入同一分區,則所有保證均關閉。
因此,對於兩個使用者,您將無法期望訪問在處理過程中丟失的消息。 但是,如果您堅持使用一個消費者並使用“至少一次郵件傳遞”模式,則:
對於至少一次傳遞,使用者從分區中讀取數據,處理消息,然后提交已處理消息的偏移量。 在這種情況下,使用者可以在處理消息和提交偏移量之間崩潰,並且當使用者重新啟動時,它將再次處理消息。 這導致下游系統中出現重復消息,但沒有數據丟失。
Kafka保證消息傳遞至少一次。 但是您永遠不會丟失消息。
您所說的情況永遠不會發生。 除非讀取消息,否則無法提交偏移量。 您已打開自動提交。 這只是說您將在每個常規時間間隔內提交偏移量。 這並不意味着偏移量會在不讀取消息的情況下向前移動。 卡夫卡保證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.