kafka到底會不會丟訊息?

2021-10-21 06:12:08 字數 665 閱讀 9310

網上很多文章都有講解kafka是如何保證不丟失訊息的,但是真正的不丟訊息嗎?特別是當我看到broker寫訊息是寫入記憶體中,也就是作業系統頁快取中,我就在想,如果這個時候物理機重啟,記憶體東西都沒了,訊息不久沒有了嗎,於是帶著這個疑問去找了很多資料,我們今天就談談到底會不會丟訊息。

生產者發訊息給broker後,訊息寫入leader後,follower是主動與leader進行同步,然後發ack告訴生產者收到訊息了。這裡kafka通過配置request.required.acks屬性來確認訊息的生產,一共有3種模式:

kafka producer 的引數acks 的預設值為1,所以預設的producer級別是at least once,並不能exactly once。丟訊息的情況下,有2種場景:

all:保證leader和follower不丟,但是如果網路擁塞,沒有收到ack,生產者會有重**的問題,但訊息不會丟。

作業系統本身有一層快取,叫做 page cache,當往磁碟檔案寫入的時候,系統會先將資料流寫入快取中,至於什麼時候將快取的資料寫入檔案中是由作業系統自行決定。

消費者通過pull模式主動的去 kafka 集群拉取訊息,與producer相同的是,消費者在拉取訊息的時候也是找leader分割槽去拉取。並且消費訊息的時候會把訊息commit掉,但是commit方式有2種:

刨根問底,kafka 到底會不會丟訊息

Kafka 會不會丟訊息?

kafka 是分布式發布 訂閱訊息系統。它最初由 linkedin 公司開發,之後成為 apache 專案的一部分。kafka 是乙個分布式的,可劃分的,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料。kafka 的整體架構非常簡單,是顯式分布式架構,主要由 producer broker...

let const 等到底會不會變數名提公升?

深刻理解變數名提公升過程 變數的建立三個過程 建立 初始化 賦值 變數名提示指的是 建立 初始化 提公升 let const 只是建立提公升 並未初始化,所以不能用 暫存性死區 object.defineproperty window,testlet console.log testlet let ...

Mac電腦到底會不會感染病毒呢

什麼是惡意軟體?我們經常將 惡意軟體 和 病毒 互換使用,其實它們指的是對於不同型別的攻擊。普通病毒會通過降低速度,填充硬碟驅動器或刪除重要檔案來損壞您的軟體。事實上,病毒很難清除,因為它們會在您的作業系統內複製。如今,大多數計算機在抵禦傳統病毒方面都做得相當不錯,但是也經常受到其他軟體威脅。是什麼...