kafka原理解析(適合跟我一樣從來爲了解過的小白進行了解)

官網:http://kafka.apache.org

1. 定義(簡單瞭解kafka)

  • 最初是由Linkedin公司開發
  • 是個分佈式,分區的,多副本的,多訂閱者,基於Zookeeper協調的分佈式日誌系統,常用於web/nginx日誌,訪問日誌,消息服務等等
  • 發佈和訂閱;存儲;處理實時的流式數據流的記錄
  • 是一個可持久化分佈式的消息隊列

2. 於Flume進行比較

  • kafka是一個通用的系統,可有多個生產者和多個消費者共享多個主題(topic)(在主題上發佈消息)
  • Flume被設計爲往HDFS,HBase發送消息,對HDFS有特殊的優化
  • Hadoop使用Flume;流式處理系統如Storm,Sparkstreaming,會使用kafka

3. kafka架構

在這裏插入圖片描述

  • producer:消息生產者
  • consumer:消息消費者
  • broker:kafka集羣的server,負責處理消息的讀寫,請求,存儲
  • topic:消息隊列/分類
  • 觀察消費者模式
  • 可以在單臺的虛擬機上搭建,也可以進行多臺真正的分佈式

4. 消息存儲和生產消費模型

在這裏插入圖片描述
上面的這個圖來源於官網,解釋了kafka的消息存儲,接下來解釋一個這個圖

  • topic:kafaka通過發佈topic來發布消息,消費者通過訂閱話題來獲得消息,同數據更新的時候也向topic更新,這樣訂閱者也能獲得更新的消息
  • 一個topic分爲多個partition
  • 每個partition的內部消息都是強有序的,每個消息都有一個序號(offset)。如上圖所示的0,1…
  • 一個partition對應一個broker,而一個broker可以對應多個partition
  • 所存儲的消息根據時間策略刪除,而不是消費者消費完就刪除,當然消息也可不進行消費就刪除,消息是可持久化的
  • producer可決定往哪個partition中寫消息,可以是輪詢的負載均衡,或是基於Hash的partition策略
  • 在進行寫消息的時候如圖所示是追加
  • offset唯一標識一個消息,因爲partition中的消息是強有序的

5. kafka的消息構成

  • 消息是由topic組成的
  • 可以想象爲一個隊列,一個隊列就是一個topic
  • topic分爲多個partition(並行的關係)
  • 每個partition中的消息都是強有序的有序隊列
  • 這個partition可以理解爲一個文件,當數據發送過來的時候它可以在這個partition上面進行追加,kafka和很多消息系統不一樣,很多消息系統是消費完了就刪除,而kafka是根據時間策略刪除,而不是消費完就刪除,kafka中的消息可持久化,過期之後進行刪除
  • concumer自己維護消費哪個offset
  • 每個concumer都有自己的group
  • group內是queue消費模型
  • 各個concumer消費不同的partition
  • 一個消息在同一個group當中只消費一次
  • group間是publish-subscribe消費模型
  • 各個group各自獨立消費,互不影響
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章