kafka 基本概念

應用場景

  • 日誌聚合,通常kafka 使用來記錄日誌信息。
  • 限流削峯,當大量數據同時請求到服務的時候,能夠形成服務宕機,直接將消息放到kafka,而後對應服務根據規則取讀取。

高吞吐率

  • 順序讀寫(partition中的消息是順序讀寫的。)
  • 零copy
  • 批量發送
  • 壓縮消息

基本術語

  • broker kafka機器節點
  • topic 主題 邏輯上概念,來劃分消息所屬的類
  • partition 主題對應到物理存儲上 。一個topic 至少一個partition 。在某個partition中的消息是有序的。多分區小沒有辦法保證消息的有序性 分區自己是 FIFO。通常 分區數量是borker的整數倍
  • segment 將partiton 細分爲段,(三個文件一套 ,index .log )每一個段的最大存儲值是相同的

    經過二分查找找到對應的 文件log 而後根據 index文件中存儲的偏移量 找到對應的log中的偏移量存儲的消息。java

    log 文件的最大大小配置在配置文件中log.segment.bytesegmentfault

  • consumer 消費者: 一個消費者可消費多個topic,也能夠消費同一個topic中的多個parition中的消息。一個分區中的消息運行多個無關的消費者同時消費。
  • cosumergroup:消費者組 組內的消費者會協調在一塊兒,平均消費分區。對分區的消費是平均的。可是對消息的消費不是平均的。某個消費者只能消費一個pairtition中的消息。
  • producer 生產者: 生成的消息默認是平均分的。也能夠指定寫到某個partition。也能夠根據消息的key 看成路由算出來寫到某個分區
  • 分區副本: 防止消息丟失作的 分區的備份。須要注意的是 備份得在不一樣的機器上。
  • partition leader :多個副本 得有一個 leader。負責當前消息的讀寫的partition。broker controller 負責leader 的選舉
  • partition follower:主備 消息 follower 不是主從。主備的。從節點不對外提供服務
  • isr 副本的同步列表 get /brokers/topics/java/partitions/state 獲得 一個 isr :【2,1】 列表 leader 的節點下標 leader 「2」
  • offest :每條消息都有一個當前parittion下的惟一的一個64字節的偏移量。先根據index下索引文件找到對應的偏移量。根據偏移量找到對應的消息的地址值。
  • broker controller broker有一個被選舉爲controller。負責管理 partition和 replicas的狀態 例如 partition leader 故障,由controller 負責從isr的 follower中選舉出一個新的leader 。當某個partition數量發生變化的時候,controller來負責從新分配消費者。
  • Hw 與 Leo
    hw 表示consumer能夠消費到的最高的 partition偏移量。爲了保證 partiton中leader和follower的數據一致性spa

    leo表示 follower 當前最後一個寫入消息的位置。日誌

    leader新寫入的消息。consumer不能馬上消費。等到同步完成後,更新hw 。消息才能被消費code

    file

    • Zookeeper
從kafka 0.9 版本以後,zk的工做變的很簡單,負責維護和協調borker。broker controller的選舉工做。zk中存放着 各個topic主題的分區信息,分區的leader信息等。

* Coordinator
是broker上的一個進程。管理consumer group中的各個成員,主要用於offset位移的管理和rebalance。

* Rebalance
 當分區數量發生變化的時候,或者消費者組中的消費者數量發送變化的時候,將partiton從新分配到不一樣的消費者。
 
 *offset commit
 consumer 消費一批消息後,須要將消費完的offset提交給broker。讓borker記錄下哪些消息是消費過的。
 系統會將提交的offset 作完消息寫入到 _consumer_offsets 主題的partiton中。key爲消費者的id。 根據key 計算出hash值,而後再將hash與50 取模,餘數就是對應的partition編號。
相關文章
相關標籤/搜索