Kafka個人總結

2021-10-08 10:25:53 字數 1164 閱讀 7152

kafka 應對場景:訊息持久化、吞吐量是第一要求、狀態由客戶端維護、必須是分布式的。kafka 認為 broker 不應該阻塞生產者,高效的磁碟順序讀寫能夠和網路 io 一樣快,同時依賴現代 os 檔案系統特性,寫入持久化檔案時並不呼叫 flush,僅寫入 os pagecache,後續由 os flush。

這些特性決定了 kafka 沒有做「確認機制」,而是直接將生產訊息順序寫入檔案、訊息消費後不刪除(避免檔案更新),該實現充分利用了磁碟 io,能夠達到較高的吞吐量。代價是消費者要依賴 zookeeper 記錄佇列消費位置、處理同步問題。沒有消費確認機制,還導致了 kafka 無法了解消費者速度,不能採用 push 模型以合理的速度向消費者推送資料,只能利用 pull 模型由消費者來拉訊息(消費者承擔額外的輪詢開銷)。

訊息生產分為同步模式和非同步模式

配置:producer.type:訊息傳送型別同步還是非同步,預設為同步

訊息確認分為三個狀態

(a)0:生產者只負責傳送資料

(b)1:某個partition的leader收到資料給出響應

(c)-1:某個partition的所有副本都收到資料後給出響應

在同步模式下

(a)生產者等待10s,如果broker沒有給出ack響應,就認為失敗。

(b)生產者重試3次,如果還沒有響應,就報錯。

在非同步模式下

(a)先將資料儲存在生產者端的buffer中。buffer大小是2萬條。

(b)滿足資料閾值或者數量閾值其中的乙個條件就可以傳送資料。

(c)傳送一批資料的大小是500條。

kafka訊息保證生產的資訊不丟失和重複消費問題

(1)使用同步模式的時候,有3種狀態保證訊息被安全生產,在配置為1(只保證寫入leader成功)的話,如果剛好leader partition掛了,資料就會丟失。

(2)還有一種情況可能會丟失訊息,就是使用非同步模式的時候,當緩衝區滿了,如果配置為0(還沒有收到確認的情況下,緩衝池一滿,就清空緩衝池裡的訊息),

資料就會被立即丟棄掉。

在資料生產時避免資料丟失的方法:

(1)在同步模式的時候,確認機制設定為-1,也就是讓訊息寫入leader和所有的副本。

(2)在非同步模式下,如果訊息發出去了,但還沒有收到確認的時候,緩衝池滿了,在配置檔案中設定成不限制阻塞超時的時間,也就說讓生產端一直阻塞,這樣也能保證資料不會丟失。

個人Kafka使用

kafka和rabbitmq的比較 權威文章 比較 rabbitmq比kafka成熟,在可用性上,穩定性上,可靠性上,rabbitmq超過kafka kafka設計的初衷就是處理日誌的,可以看做是乙個日誌系統,針對性很強,所以它並沒有具備乙個成熟mq應該具備的特性 kafka的效能 吞吐量 tps ...

kafka知識總結

1 kafka是什麼 類jms訊息佇列,結合jms中的兩種模式,可以有多個消費者主動拉取資料,在jms中只有點對點模式才有消費者主動拉取資料。kafka是乙個生產 消費模型。producer 生產者,只負責資料生產,生產者的 可以整合到任務系統中。資料的分發策略由producer決定,預設是defa...

Kafka核心總結

乙個kafka的message由乙個固定長度的header和乙個變長的訊息體body組成。header部分由乙個位元組的magic 檔案格式 和四個位元組的crc32 用於判斷body訊息體是否正常 構成。當magic的值為1時,會在magic和crc32之間多乙個位元組的資料 attributes...