kafka簡介

在這裏插入圖片描述

一言蔽之

kafka誕生於LinkedIn,是其貢獻的分佈式高性能消息引擎服務【MQ】(如今其定位爲一個分佈式流處理平臺

消息引擎系統

  • 消息引擎系統EMS:企業以一套標準消息規範屏蔽不同系統的差異,傳遞準確語義消息。

  • 設計因素:

    • 消息設計:結構 xml、json、file、binary
    • 傳輸協議:http、rpc、binary
  • 消息引擎範式

    • 消息隊列:點對點
      在這裏插入圖片描述
    • 發佈訂閱:一對多
      在這裏插入圖片描述
    • java 消息服務:jms,作爲api規範,提供很多接口實現用於實現分佈式系統消息傳遞。大部分主流mq支持,kafka則沒完全遵循。另闢蹊徑。

設計概要

  1. 吞吐量/延時
    • 對於kafka而言,吞吐量就是每秒能處理的消息數目或者字節數
      • 頁緩存
      • io交給os
      • 零拷貝sendfile
      • 追加寫入日誌,避免磁盤隨機寫尋址(高速
        • 固態與非固態
        • 順序寫和隨機寫
    • 延時表示客戶端發起請求與服務器處理並響應給客戶端的這段時間
      • micro-batch實現低延遲高吞吐
  2. 消息持久化
    • 解耦消息發送和消費
    • 實現靈活消息處理,消息重演
  3. 負載均衡和故障轉移
    • 負載均衡, producer->topic(key hash)partition->consumer group均衡消費
      在這裏插入圖片描述
    • 故障轉移,容錯:
      • 集羣controller 依靠zk,處理broker(isr)
      • consumer重平衡(隨機,輪詢,sticky)
        • 舊版本依賴zk
        • 新版本依賴group Coordinator
  4. 伸縮性
    • zk輕量級狀態維護,元數據(topic,partition信息等)更新
      • kafka consumer註冊的watcher就能感知所消費的partition列表和發現broker
      • broker用zk來註冊broker以及監聽分區leader存活

kafka基本術語

  • 消息
    • 二進制消息
    • bytebuffer+頁緩存
  • topic和partition:topic-partition-message
    • 業務消息,topic代表一類消息,是個邏輯概念
    • partition可以理解成有序消息日誌(夾着這一層提高吞吐
  • offset
    • kafka本質就是一個消息tuple(三元組)-> <tioic,partition,offset>
  • replica
    • partition副本
  • leader和follower:區別傳統主備(mysql讀寫分離都提供服務),此類leader唯一對外服務,其餘被動追隨
    • 副本分爲領導者
    • 追隨者
  • ISR:in-sync replica
    • isr集合:所有replica同步leader
    • 交付語義:所有replica收到同一條消息,纔算已提交
    • isr動態調整:由於各種原因,replica消息滯後,isr踢出,replica重新追上leader,納入isr

應用場景 FAQ
網站行爲日誌追蹤 用戶行爲都可以以消息形式發到kafka,用於行爲分析或者優化網站
審計數據收集 運維監控
日誌收集 企業分佈式跨部門多應用產生日誌,可以統一通過kafka輸送到下游如hdfs
Event Sourcing 用事件序列表示狀態變更,【DDD領域驅動】。
流式處理 純淨,輕應。對標【flink storm spark streaming】。應用於以kafka爲系統總線的場景,此場景下,相比spark stream減少kafka消息拆分再組裝的一些額外開銷。

By mori.wang
vipshop.fcs
2019

發佈了85 篇原創文章 · 獲贊 36 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章