kafka --第一章:基礎知識

Kafka 個高吞吐量、分佈式的發佈一訂閱消息系統。據 Kafka 官方網站介紹,當前的 Kafka 己經定位爲 個分佈式流式處理平臺( distributed earning platform ),它最初由 Linkedin 公司開發,後來成爲 Apache 項目的一部分。 Kafka 核心模塊使用 Scala 語言開發,支持多語言 (如 Java IC++ rthon Go Erlang Node.js 等)客戶端,它以可水平擴展和具有高吞吐量等

特性而被廣泛使用 目前越來越多的開源分佈式處理系統(如 Flume Apache Storm Spark Flink 等)支持與 Kafka 集成。

Kafka 是一款開源的、輕量級的 、分佈式、可分區和具有複製備份的 Replicated )、基於 Zoo Keeper 協調管理的分佈式流平臺的功能強大的消息系統 。與傳統的消息系統相比, Kafka 能夠很好地處理活躍的流數據,使得數據在各個子系統中高性能、低延遲地不停流轉。

Kafka 官方網站介紹, Kafka 定位就是一個分佈式流處理處理平臺,必須具備以下 個關鍵特性。 能夠允許發佈和訂閱流數據。從這個角度來講,平臺更Kafka 簡介 消息系統。

1. 存儲流數據時提供相應的容錯機制。

2. 當流數據到達時能夠被及時處理

kafka下載:http://kafka.apache.org/downloads

下載好,解壓。

啓動如下:

1.啓動zookeeper: 

    1. cd C:\tools\kafka\kafka_2.11-1.1.1\bin\windows + 回車

    2.zookeeper-server-start.bat C:\tools\kafka\kafka_2.11-1.1.1\config\zookeeper.properties +回車 【這樣zk就啓動啦】

2.啓動kafka:

   1. cd C:\tools\kafka\kafka_2.11-1.1.1\bin\windows + 回車

   2.kafka-server-start.bat C:\tools\kafka\kafka_2.11-1.1.1\config\server.properties +回車 【這樣kafka 就啓動啦】

kafka Manager 安裝:

  1.下載安裝包:https://pan.baidu.com/s/1tW_5diGSg2ZhJFAnwy4w9w  提取碼:bps9 

  2.在c盤下進行建文件夾KM,將安裝包進行解壓

  3.將配置文件C:\tools\km\km\conf\application.conf      修改成:kafka-manager.zkhosts="localhost:2181"

  4.啓動C:\tools\km\km\bin\kafka-manager.bat【需要依次啓動ZK,kafka,KM】

  5.訪問:http://127.0.0.1:9000

  6.如下畫面:

   

3.下面開始創建項目運用kafka

kafka 組件的概念:

主題

Kafka 組消息抽象歸納爲 個主題( Topic ),也就是說,一個主題就是對消息的 分類。生產者將消息發送到特定主題,消費者訂閱主題或主題的某些分區進行消費。

2. 消息

消息是 Kafka 通信的基本單位,由 個固定長度的消息頭和 個可變長度的消息體構成 在老版本中,每 條消息稱爲 Message :在由 Java 重新實現的客戶端中,每 條消息稱爲 Record。

3.分區和副本

Kafka 組消息歸納爲 個主題,而每個主題又被分成 個或多個分區( Partition 個分區由 系列有序、不可變的消息組成,是一個有序隊列。 每個分區在物理上對應爲 個文件夾,分區的命名規則爲主題名稱後接“一”連接符,之 後再接分區編號,分區編號從 開始,編號最大值爲分區的總數減 每個分區又有 至多個 副本( Replica ),分區的副本分佈在集羣的不同代理上,以提高可用性 。

Kafka 只能保證 個分區之內消息的有序性,並不能保證跨分區消息的有序性 每條消息 被追加到相應的分區中,是順序寫磁盤,因此效率非常高,這是 Kafka 高吞吐率的 個重要保 證。同時與傳統消息系統不同的是, Kafka 並不會立即刪除已被消費的消息,由於磁盤的限制 消息也不會 直被存儲,因此 Kafka 提供兩種刪除老數據的策略, 是基於消息己存儲的時間長度, 是基於分區的大小。這兩種策略都能通過配置文件進行配 置。

4. Leader 副本和 Follower 副本

由於 Kafka 副本的存在,就需要保證 1個分區的多個副本之間數據的 1致性, Kafka 會選 擇該分區的 1個副本作爲 Leader 副本,而該分區其他副本即爲 Follower 副本,只有 Leader 副本才負責處理客戶端讀/寫請求, Follower 副本從 Leader 副本同步數據。

引入 Leader 副本後客戶端只需與 Leader 副本進行交互,這樣數據一致性及順序性就有了 保證 副本 Follower Leader 的角色並不是固定不變的,如果 Leader 失效, 通過相應的選舉算法將從其他 Follower 副本中選出新的 Leader 副本。

偏移量

任何發佈到分區的消息會被直接追加到日誌文件(分區目錄下以" .log ”爲文件名後綴的 數據文件〉的尾部,而每條消息在日誌文件中的位置都會對應一個按序遞增的偏移 。偏移量是一個分區下嚴格有序的邏輯值,它並不表示消息在磁盤上的物理位置 由於 Kafka 幾乎不允 許對消息進行隨機讀寫,因此 Kafka 並沒有提供額外索引機制到存儲偏移 ,也就是說並不會 給偏移量再提供索引。消費者可以通過控制消息偏移量來對消息進行消費,如消費者可以指定 消費的起始偏移量。爲了保證消息被順序消費 消費者己消費的消息對應的偏移量也需要保存。

6. 日誌段

1個日誌又被劃分爲多個日誌段( LogSegment ),日誌段是 Kafka 日誌對象分片的最小單 位。與 日誌對象 一樣,日誌段也是 1個邏輯概念, 1個日誌段對應磁盤上 一個具體日誌文件和 兩個索引文件。日誌文件是以 .log ”爲文件名後綴的數據文件,用於保存消息實際數據 ,2個索引文件分別以“ .index ”和“ timeindex ”作爲文件名後綴,分別表示消息偏移量索 引文件 和消息時間戳索引文件。

7. 代理

Kafka 基本體系結構中我 提到了 Kafka 集羣 Kafka 集羣就是由一個或多個 Kafka 實例構成,我們將每一個 Kafka 實例稱爲代理( Broker ),通常也稱代理爲 Kafka 服務器 ( KafkaServer) 。在生產環境中 Kafka 集羣 般包括一臺或多臺服務器,我們可以在一臺服務器 上配置 1個或多個代理。每 個代理都有唯 的標識 id ,這個 id 個非負整數。在一 Kafka 集羣中,每增加 1個代理就需要爲這個代理配置 1個與該集羣中其他代理不同的 id, id 值可以 選擇任意非負整數即可,只要保證它在整個 Kafka 集羣中唯 ,這個 id 就是代理的名字,也就 是在啓動代理時配置的 broker.id 對應的值。這樣對代理進行遷移就變得更方便,從而對消費者來說是透明 不會影響消費者對消息的消費。

8. 生產者

生產者(Producer )負責將消息發送給代理,也就是向 Kafka 理髮送消息的客戶端

9. 消費者和消費組

消費者( comsumer )以拉取( pull )方式拉取數據,它是消費的客戶端。在 Kafka 每一 個消費者都屬於 個特定消費組( ConsumerGroup ),我們可以爲每個消費者指定 一個消費組, groupld 代表消費組名稱,通過 group.id 置設置 如果不指定消費組,則該消費者屬於默認消費組 test-consumer-group 同時,每個消費者也有 1個全局唯 一的id,通過配置項 client.id指定,如果客戶端沒有指定消費者的 id, Kafka 會自動爲該消費者生成1 個全局唯 id ,格 式爲$ {groupld }-$ {hostN ame }-$ {times tamp}-$ {UUID 前8位字符}。同一個主題的一條消息只能被同 1個消費組下某 1個消費者消費,但不同消費組的消費者可同時消費該消息 。消費組是 Kafka 用來實現對一個主題消息進行廣播和單播的手段,實現消息廣播只需指定各消費者均屬於不同 的消費組,消息單播則只 讓各消費者屬於同 1個消費組。

 

10. ISR

Kafka ZooKeeper 中動態維護了 IS R(In-sync Replica ),即保存同步的副本列表, 列表中保存的是與 Leader 副本保持消息同步的所有副本對應的代理節點 id 如果 Follower 副本巖機或是落後太多,則該 Follower 副本節點將從 ISR 列表中移除。

11. ZooKeeper

 ZooKeeper 保存相應元數據信息, Kafka 元數據信息包括如代理節點信息、 Kafka 集羣信息、舊版消費者信息及其消費偏移量信息、主題信息、分區狀態信息、分區副本分配方 案信息、動態配置信息等。 Kafka 在啓動或運行過程當中會在 ZooKeeper 上創建相應節點來保 存元數據信息, Kafka 通過監昕機制在這些節點註冊相應監聽器來監昕節點元數據的變化,從 而由ZooKeeper 負責管理維護 Kafka 集羣,同時通過 ZooKeeper 我們能夠很方便地對 Kafka 羣進行水平擴展及數據遷移。

Kafka 設計動機

Kafka 的設計初衷是使 Kafka 能夠成爲統一 、實時處理大規模數據的平臺。爲了達到這個 目標, Kafka 必須支持以下幾個應用場景:

(l) 具有高吞吐量來支持諸如實時的日誌集這樣的大規模事件流。

(2 )能夠很好地處理大量積壓的數據,以便能夠週期性地加載離線數據進行處理

(3 )能夠低延遲地處理傳統消息應用場景。

(4 )能夠支持分區、分佈式,實時地處理消息,同時具有容錯保障機制

kafka特性:

1.Kafka 高度依賴於文件系統來存儲和緩存消息。操作系統提供 了預讀( read-ahead )和延遲寫(write-behind )技術,可以非常快的支持讀寫。消息系統數據持久化 般採用爲每個消費者隊列提供 一個B樹或其他通用的隨機訪問數 據結構來維護消息的元數據。由於 Kafka 將消息進行持久化,使得 Kafka 在機器重啓後,己存儲的消息可繼續恢復 使用 同時 Kafka 能夠很好地支持在線或離線處理、與其他存儲及流處理框架的集成。

2.高吞吐量

高吞吐量  Kafka 設計的主要目標, Kafka 將數據寫到磁盤,充分利用磁盤的順序讀寫 。同時, Kafka 在數據寫入及數據同步採用了零拷貝( zero-copy )技術,採用 sendFile ()函數調用, sendFile()函數是在兩個文件描述符之間直接傳遞數據,完全在內核中操作,從而避免了內核緩 衝區與用戶緩衝區之間數據的拷貝,操作效率極高。 Kafka 還支持數據壓縮及批 量發送,同時 Kafka 將每個 主題劃分爲多個分區,這 一系列的優化及實現方法使得 Kafka 具有很高的吞吐量。 經 Kafka 應用的驗證, Kafka 支持每秒數百萬級別的消息。

3.擴展性

Kafka 要支持對大規模數據的處理,就必須能夠對集羣進行擴展,分佈式必須是其特性之一,這樣就可以將多臺廉價的 PC 服務器搭建成一個大規模的消息系統 Kafka 依賴 ZooKeeper 來對集羣進行協調管理,這樣使得 Kafka 更加容易進行水平擴展,生產者、消費者和代理都爲 分佈式,可配置多個 同時在機器擴展時無需將整個集羣停機,集羣能夠自動感知,重新進行 負責均衡及數據複製。

4.多客戶端支持

Kafka 支持多種連接器 (Connector )的接入,也提供了 Connector API 供開發者調用 Kafka 與當前主流的大數據框架 都能很好地集成,如 Flume Hadoop HBase Hive Spark Storm 等。

5.Kafka Streams

Kafka 0.10 之後版本中引入 Kafak Streams, Kafka Streams 是一個用 Java 實現的用 於流處理的 jar 文件。

6.安全機制

通過 SSL 和 SASL(Kerberos), SASL/PLA時驗證機制支持生產者、消費者與代理連接 時的身份認證:

支持代理與 ZooKeeper 連接身份驗證:

. 通信時數據加密:

客戶端讀、寫權限認證:

Kafka 支持與外部其他認證授權服務的集成

7. 數據備份

Kafka 可以爲每個主題指定副本數,對數據進行持久化備份,這可以 定程度上防止數據 丟失,提高可用性。

8.輕量級

Kafka 的代理是無狀態的,即代理不記錄消息是否被消費,消費偏移 量的管理交由消費者 自己或組協調器來維護。同時集羣本身幾乎不需要生產者和消費者的狀態信息,這就使得 Kafka 非常輕量級,同時生產者和消費者客戶端實現也非常輕量級。

9. 消息壓縮

Kafka 支持 Gzip, Snappy LZ4  3種壓縮方式,通常把多條消息放在 起組成 MessageSet, 然後再把 Message Set 放到 條消息裏面去,從而提高壓縮比率進而提高吞吐量。

Kafka 應用場景

消息系統或是說消息隊列中間件是當前處理大數據 個非常重要的組件,用來解決應用解耦、異步通信、流量控制等問題,從而構建一個高效、靈活、消息同步和異步傳輸處理、存儲轉發、可伸縮和最終一致性的穩定系統。當前比較流行的消息中間件有 Kafka, RocketMQ, RabbitMQ, ZeroMQ, ActiveMQ, MetaMQ,Redis等,這些消息中間件在性能及功能上各有所 長。

使用場景:

( 1)消息系統 Kafka 作爲一款優秀的消息系統,具有高吞吐量、 內置的分區、備份冗餘 分佈式等特點,爲大規模消息處理提供了一種很好的解決方案。

(2 )應用監控。利用 Kafka 採集應用程序和服務器健康相關的指標,如 CPU 佔用率、 IO ,內存、連接數、 TPS ,QPS 等,然後將指標信息進行處理,從而構建 個具有監控儀表盤、曲 線圖等可視化監控系統。例如,很多公司採用 Kafka ELK (Elastic Search Logstash Kibana) 整合構建應用服務監控系統。

(3 )網站用戶行爲追蹤。爲了更好地瞭解用戶行爲、操作習慣,改善用戶體驗,進而對產 品升級改進,將用戶操作軌跡、內容等信息發送到 Kafka 集羣上,通過 Hadoop Spark Strom 等進行數據分析處理,生成相應的統計報告,爲推薦系統推薦對象建模提供數據源,進而爲每 個用戶進行個性化推薦。

(4 流處理 ,需要將己收集的流數據提供給其他流式計算框架進行處理,用 Kafka 收集流 個不錯的選擇,而且當前版本的 Kafka 提供了 Kafka Streams 支持對流數據的處理 )持久性日誌。

(5)持久性日誌, Kafka 可以爲外部系統提供一種持久性日誌的分佈式系統。日誌可以在 多個節點間進行備份 Kafka 爲故障節點數據恢復提供了 一種重新同步的機制。同時, Kafka 便與 HDFS Flume 進行整合,這樣就方便將 Kafka 採集的數據持久化到其他外部系統 。

項目展示:https://download.csdn.net/download/qq_35781178/11454179

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