kafka
kafka把資料往磁碟上寫,但是在磁碟上存它的讀寫速度比記憶體快,這個依賴於預讀和後寫功能,但是這個預讀和後寫必須是按照順序的方式,若沒有順序的方式優化的話,不存在什麼預讀和後寫。
特點:訊息持久化(能落到磁碟)通過o(1)的磁碟資料結構提供資料的持久化
高吞吐量
分布式:擴充套件能力強
多客戶端支援
實時性基本元件
broker 每一台機器叫乙個broker
producer 日誌訊息的生產者,用來寫資料
consumer 訊息的消費者,用來讀資料
topic 不同消費者制定topic中去讀,不同生產者往不同的topic中寫,乙個topic是由乙個或多個partition實現的
partition 在topic基礎上做了進一步區分分層,以資料夾的形式存在
zookeeper 儲存只kafka的broker 和consumer 的資訊,
因為broker和consumer 之間存在乙個負載均衡,依賴於zookeeper,出現個別節點不穩定,會體現rebalance機制,但是producer 和broker不存在負載均衡
producer和broker之間是乙個push模式
consumer和broker之間是乙個pull模式
topic 分成多個partition的原因增加吞吐量
kafka 把更多的主導權交給了消費者(client 來儲存各自的offset),kafka會保留該訊息的所有資訊,預設是7天,無論消費者是否消化訊息,都會持久化一段時間
producer 有兩種模式(producer.type=sync(同步),async(非同步)):
同步模式 :實時
非同步模式:達到一定條件(時間,資料量)
consumer 和乙個partition讀資料,其它的consumer是不允許再讀資料的
consumer group 乙個consumer之間是不允許有重複的
partition 中對應多個segment ,segment 是partition內部的落地檔案,要知道訊息的訊息號,使用二分法找到對應的segmentfile
kafka的交付保證:
at least once 策略:訊息至少傳送一次,如果訊息未能接受成功,會出現重發的可能,保證訊息不丟失,預設採用該策略,即在消費者端的處理順序是獲得訊息—》處理訊息—》儲存位置。這可能導致一旦客戶端掛掉,新的客戶端接管時處理前面客戶端已處理過的訊息。
三種保證策略:
at most once 訊息可能會丟,但絕不會重複傳輸
at least one。訊息絕不會丟,但可能會重複傳輸
exactly once 每條訊息肯定會被傳輸一次且僅傳輸一次
副本管理
kafka將日誌複製到指定伺服器上(日誌就是資料)
副本的單元是partition,正常情況下,每個分割槽有乙個leader和0到多個follower,資料寫的話只能寫在leader上,讀也是,針對partition 副本管理,如果一共有f+1個broker,允許掛掉f個
isr:kafka在zk動態維護了乙個set(裡面表示所有副本,都是跟上了leader的節奏),下面兩種情況isr需要刪除
訊息延遲
資料落後太多
kafka用兩個條件保證活著
zookeeper註冊的session還在且可以維護
如果是follower則能緊跟隨leader,且不能落後太遠
kafka使用in sync (isr)來代替或者,如果follower卡住或者落後太遠,則leader將移除同步列表中的in syn,至於落後多遠由replica.lag.max.messages配置,如果設為4,表明follower不能落後於leader超過3個訊息,否則從isr中刪除,判定為掛掉
Kafka學習筆記
1.1簡介 apache kafka 是分布式發布 訂閱訊息系統 訊息中介軟體 它最初由 linkedin 公司開發,之後成為 apache 專案的一部分。kafka 是一種快速 可擴充套件的 設計內在就是分布式的,分割槽的和可複製的提交日誌服務。apache kafka 與傳統訊息系統相比,有以下...
kafka學習筆記
1.1 kafka的特性 controller在zookeeper註冊watch zookeeper管理kakfabroker集群。所有的kafkabroker節點一起去zookeeper上註冊乙個臨時節點,只有乙個能成功,成功註冊的節點稱之為 kafkabrokercontroller,其餘的稱之...
kafka學習筆記
名詞解釋 物理儲存結構 說明segment中index data file對應關係物理結構如下 message資料結構 資料查詢過程 讀取offset 368776的message todo 定位是哪個segment檔案 通過segment檔名二分查詢,比如 當offset 368776時定位到00...