kafka架構和常見術語

Kafka是一個分佈式系統,易於向外擴展。它同時爲發佈和訂閱提供高吞吐量。它支持多訂閱者,當失敗時能自動平衡消費者。消息的持久化。

kafka架構

從圖上看到主要包含三個組件,producer, consumer, zookeeper, broker。Kafka通過Zookeeper管理集羣配置,選舉leader,以及在consumer group發生變化時進行rebalance。Producer使用push(推)模式將消息發佈到broker,Consumer使用pull(拉)模式從broker訂閱並消費消息。

常見術語:

1.topic&partition

一個topic可以認爲一個一類消息,每個topic將被分成多個partition,每個partition在存儲層面是append log文件。任何發佈到此partition的消息都會被追加到log文件的尾部,每條消息在文件中的位置稱爲offset(偏移量),offset爲一個long型的數字,它唯一標記一條消息。每條消息都被append到partition中,是順序寫磁盤,因此效率非常高(經驗證,順序寫磁盤效率比隨機寫內存還要高,這是Kafka高吞吐率的一個很重要的保證)。

2.segment

段。將 partition 進一步細分爲了若干的 segment,每個 segment 文件的最大大小相等。

3.Consumer Group

consumer group 是 kafka 提供的可擴展且具有容錯性的消費者機制。組內可以有多個消費者,它們共享一個公共的 ID,即 group ID。組內的所有消費者會協調在一起平均消費訂閱主題的所有分區。

4.isr

  • ISR,In-Sync Replicas,是指副本同步列表。
  • AR,Assigned Replicas
  • OSR,Outof-Sync Replicas
  • AR = ISR + ORS

5.watermark

  • lw

  LW是Low Watermark的縮寫,俗稱“低水位”,代表AR集合中最小的logStartOffset值,副本的拉取請求(FetchRequest,它有可能觸發新建日誌分段而舊的的被清理,進而導致logStartoffset的增加)和刪除請求(DeleteRecordRequest)都可能促使LW的增長

  • lso

LSO特指LastStableOffset。它具體與kafka的事物有關。消費端參數——isolation.level,這個參數用來配置消費者事務的隔離級別。字符串類型,“read_uncommitted”和“read_committed”,表示消費者所消費到的位置,如果設置爲“read_committed",那麼消費這就會忽略事務未提交的消息,既只能消費到LSO(LastStableOffset)的位置,默認情況下,”read_uncommitted",既可以消費到HW(High Watermak)的位置。

  • hw

HighWatermark,高水位,表示 Consumer 可以消費到的最高 partition 偏移量。HW保證了 Kafka 集羣中消息的一致性。確切地說,是在 broker 集羣正常運轉的狀態下,保證了partition 的 Follower 與 Leader 間數據的一致性,ISR集合中最小的LEO即爲分區的HW,對消費這而言只能消費HW之前的消息

  • leo

LEO,Log End Offset,日誌最後消息的偏移量。消息是被寫入到 Kafka 的日誌文件中的,這是當前最後一個寫入的消息在 Partition 中的偏移量。
對於 leader 新寫入的消息,consumer 是不能立刻消費的。leader 會等待該消息被所有ISR 中的 partition follower 同步後纔會更新 HW,此時消息才能被 consumer 消費。LEO的大小相當於當前日誌分區中最後一條消息的offset值加1。分區ISR集合中的每個副本都會維護自身的LEO,而ISR集合中最小的LEO即爲分區的HW,對消費這而言只能消費HW之前的消息

6.isr

  • osr

osr是與leader副本同步滯後過多的副本(不包括leader)列表

  • isr

ISR就是那些與Partition Leader保持同步的列表

  • ar

AR=ISR+OSR。在正常情況下,所有的follower副本都應該與leader副本保持一定程度的同步,即AR=ISR,OSR集合爲空

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章