2 回答

TA貢獻1851條經(jīng)驗 獲得超4個贊
消息偏移量增加一并不是官方的 API 約定,即使 JavaDocs 表明了這一點(似乎應(yīng)該更新 JavaDocs)。
如果你不使用事務(wù),你要么得到至少一次語義,要么沒有保證(有些人稱之為最多一次語義)。對于至少一次,記錄可能被寫入兩次,因此,兩個連續(xù)消息的偏移量并沒有真正增加一,因為重復(fù)寫入“消耗”了兩個偏移量。
如果您使用事務(wù),則事務(wù)的每次提交(或中止)都會將提交(或中止)標記寫入主題 - 這些事務(wù)標記也“消耗”一個偏移量(這是您觀察到的)。
因此,通常您不應(yīng)依賴連續(xù)的偏移量。您得到的唯一保證是,每個偏移量在分區(qū)內(nèi)都是唯一的。

TA貢獻1891條經(jīng)驗 獲得超3個贊
我知道知道消息的偏移量可能很有用。但是,Kafka 只會保證 message-X 的偏移量大于最后一條消息(X-1)的偏移量。順便說一句,理想的解決方案不應(yīng)基于偏移計算。
在后臺,kafka 生產(chǎn)者可能會嘗試重新發(fā)送消息。此外,如果經(jīng)紀人倒閉,則可能會發(fā)生重新平衡。恰好一次語義可能會附加一條附加消息。因此,如果發(fā)生上述任何事件,您的消息偏移量可能會發(fā)生變化。
Kafka 可能會出于內(nèi)部目的向主題添加其他消息。但是 Kafka 的消費者 API 可能會丟棄這些內(nèi)部消息。因此,您只能看到您的消息,并且您的消息的偏移量不一定會增加 1。
添加回答
舉報