Java程序員面試必備——kafka的專業術語

主題 + 客戶端

  1. 發佈訂閱的對象是主題(Topic)架構

  2. 向主題發佈消息的客戶端應用程序稱爲生產者(Producer),生產者能夠持續不斷地向多個主題發送消息性能

  3. 訂閱這些主題消息的客戶端應用程序稱爲消費者(Consumer),消費者可以同時訂閱多個主題的消息學習

  4. 生產者和消費者統稱爲客戶端線程

服務端

  1. Kafka的服務端由被稱爲Broker的服務進程構成,一個Kafka集羣由多個Broker組成日誌

  2. Broker負責接收和處理客戶端發送過來的請求,以及對消息進行持久化對象

  3. 多個Broker進程可以運行在同一臺機器上,但更常見的作法是將不一樣的Broker分散運行在不一樣的機器上blog

  • 這樣若是集羣中某一臺機器宕機了,即便在它上面運行的全部Broker進程都掛掉了
  • 其餘機器上的Broker也依然可以對外提供服務,這是Kafka提供高可用的手段之一

備份

  1. 實現高可用的另外一個手段是備份機制(Replication)進程

  2. 備份:把相同的數據拷貝到多臺機器上,這些相同的數據拷貝在Kafka中被稱爲副本(Replica)同步

  3. 副本的數量是能夠配置的,Kafka定義了兩類副本:領導者副本(Leader Replica)和追隨者副本(Follower Replica)it

  • 領導者副本:對外提供服務,對外指的是與客戶端程序進行交互
  • 生產者老是向領導者副本寫消息
  • 消費者老是從領導者副本讀消息
  • 追隨者副本:被動地追隨領導者副本,不能與外界交互
  • 向領導者副本發送請求,請求領導者副本把最新生產的消息發給它,進而與領導者副本保持同步
  • MySQL的從庫是能夠處理讀請求的
  • Master-Slave => Leader-Follower
  1. 副本機制能夠保證數據的持久化或者消息不丟失,但沒有解決伸縮性(Scalability)的問題
  • 若是領導者副本積累了太多的數據以致於單臺Broker機器沒法容納,該如何處理?
  • 能夠把數據分割成多份,而後保存在不一樣的Broker上,這種機制就是分區(Partitioning)
  • MongoDB、Elasticsearch – Sharding
  • HBase – Region

分區

  1. Kafka中的分區機制是將每一個主題劃分紅多個分區(Partition),每一個分區是一組有序的消息日誌

  2. 生產者生產的每條消息只會被髮送到一個分區中,Kafka的分區編號是從0開始的

  3. 副本是在分區這個層級定義的,每一個分區下能夠配置N個副本,只能有1個領導者副本和N-1個追隨者副本

  4. 生產者向分區(分區的領導者副本)寫入消息,每條消息在分區中的位置由位移(Offset)來表徵,而分區位移老是從0開始

  5. 三層消息架構

  • 第一層是主題層,每一個主題能夠配置M個分區,而每一個分區又能夠配置N個副本
  • 第二層是分區
  • 每一個分區的N個副本中只能有1個領導者副本,對外提供服務
  • 其餘N-1個副本是追隨者副本,只能提供數據冗餘
  • 第三層是消息層,分區中包含若干條消息,每條消息的位移從0開始,依次遞增
  • 最後,客戶端程序只能與分區的領導者副本進行交互

持久化

  1. Kafka使用消息日誌(Log)來保存數據,一個日誌是磁盤上一個只能追加寫(Append-Only)消息的物理文件
  • 只能追加寫入,避免了緩慢的隨機IO操做,改成性能較好的順序IO操做,這是實現Kafka高吞吐量的一個重要手段
  1. Kafka須要按期刪除消息以回收磁盤空間,能夠經過日誌片斷(Log Segment)機制來實現
  • 在Kafka底層,一個日誌又被細分紅多個日誌段,消息被追加到當前最新的日誌段
  • 當寫滿一個日誌段後,Kafka會自動切分出一個新的日誌段,並將老的日誌段封存起來
  • Kafka在後臺有定時任務按期地檢查這些老的日誌段是否可以被刪除,從而實現回收磁盤空間的目的

消費者

  1. 點對點模型(Peer to Peer,P2P):同一條消息只能被下游的一個消費者消費,其餘消費者不能染指

  2. Kafka經過消費者組(Consumer Group)來實現P2P模型

  • 消費者組:多個消費者實例共同組成一個組來消費一組主題
  • 這組主題中的每一個分區都只會被組內的一個消費者實例消費,其餘消費者實例不能消費它
  • 消費者對分區有全部權
  1. 引入消費者組的目的:提升消費者端的吞吐量(TPS)

  2. 消費者實例(Consumer Instance):便可以是運行消費者應用的進,也能夠是一個線程

  3. 重平衡(Rebalance)

  • 若組內的某個實例掛了,Kafka可以自動檢測到,而後把這個掛掉的實例以前負責的分區轉移給組內其餘存活的消費者
  • 重平衡引起的消費者問題不少,目前不少重平衡的Bug社區都無力解決
  1. 消費者位移(Consumer Offset):記錄消費者當前消費到了分區的哪一個位置,隨時變化
  • 分區位移:表徵的是消息在分區內的位置,一旦消息被成功寫入到一個分區上,消息的分區位移就固定

小結

  1. 消息(Record):消息是Kafka處理的主要對象

  2. 主題(Topic):主題是承載消息的邏輯容器,實際使用中多用來區分具體的業務

  3. 分區(Partition):一個有序不變的消息序列,每一個主題下有多個分區

  4. 消息位移(Offset):也叫分區位移,表示一條消息在分區中的位置,是一個單調遞增且不變的值

  5. 副本(Replica)

  • Kafka中同一條消息可以被拷貝到多個地方以提供數據冗餘
  • 副本分爲領導者副本和追隨者副本,副本在分區的層級下,每一個分區可配置多個副本實現高可用
  1. 生產者(Producer):向主題發佈消息的應用程序

  2. 消費者(Consumer):從主題訂閱消息的應用程序

  3. 消費者位移(Consumer Offset):表徵消費者的消費進度,每一個消費者都有本身的消費者位移

  4. 消費者組(Consumer Group):多個消費者實例共同組成一個組,同時消費多個分區以實現高吞吐

  5. 重平衡(Rebalance)

  • 消費者組內某個消費者實例掛掉後,其餘消費者實例自動從新分配訂閱分區的過程
  • 重平衡是Kafka消費者端實現高可用的重要手段

寫在最後

  • 第一:看完點贊,感謝您的承認;
  • ...
  • 第二:隨手轉發,分享知識,讓更多人學習到;
  • ...
  • 第三:記得點關注,天天更新的!!!
  • ...

相關文章
相關標籤/搜索