kafka入門鉅獻!簡介、架構原理、配置及安裝、監控等

目錄:

1、kafka的介紹
2、kafka與傳統消息隊列的區別
3、kafka的架構模型
4、kafka的安裝與命令行使用
5、kafka的API
6、kafka的分區(共4種)
7、kafka的配置文件說明
8、flume與kafka的整合
9、kafka如何保證數據的不丟失
10、kafkaManager監控工具的安裝與使用(可視化界面)
11、kafka爲什麼這麼快

1、kafka的介紹

apache下開源的消息系統,分佈式的消息隊列,是scala編寫的。
Kafka是一個分佈式消息隊列:生產者、消費者的功能。它提供了類似於JMS的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。
broker是kafka的一個實例,kafka集羣依賴於zookeeper。

2、kafka與傳統消息隊列的區別

*傳統的是從 topic裏監聽後,消費者被動接收的。pub和sub。
*Kafka的消費者是主動去取從kafka的集羣。1 push和pull。2 吞吐量大。3 主備模式。4 可擴容。

3、kafka的架構模型

producer:生產消息,並且將消息push到kafka集羣當中的topic當中去。

topic:所有消息都可以推送到某一類自定義的topic當中去,topic也有分區和副本的概念。

consumer:通過zookeeper集羣連接到kafka集羣,消費topic,通過pull的方式主動拉取。

broker:kafka的每一個節點就叫broker 也就是臺機器。類似於hadoop的datanode。

Zookeeper:記錄kafka集羣保存的元數據信息
  • topic組件介紹:
    paritition:topic可以分爲多個partition(區),是有序的隊列,其中的每條信息都有一個id(offset),不是整體有序,但是分區有序。一個partition分爲多個segment。

    offset:偏移量 是個long型的數字,方便查找,唯一標記一條信息,數據不丟失

    Segement:消息存儲的真實文件,會不斷生成新的。

  • partition 設計 (拓展)

  • 存儲層面上:(圖的中下位置)

    • 生產者(producer) :ACK確認機制
    • 消費者(consumer): partition的消息記錄在.log文件裏;每個partition在內存中對應一個index列表,記錄每個segment中的第一條消息偏移offset。
  • ACK機制:在圖的左下角

kafka架構

4、 kafka的安裝

  • 4.1、安裝

方法1:docker安裝kafka,參考文章:https://blog.csdn.net/qq_18769269/article/details/80880633
方法2:原生的,對於原生的安裝,本文只大體說一下。
kafka是 Scala 2.11-1.0.0 版本(是向下兼容的)

 安裝:上次,安裝,安裝後,改配置文件 server.properties。注意:broker.id   host.id
 啓動:(啓動前先啓動zk集羣)
    nohup 和 & 配合使用 是後臺啓動,指定配置文件,日誌輸出到/dev/null 2>&1 &(目的地址類似於黑洞)
    nohup  bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &  (在kafka目錄下)
  • 4.2 kafka 命令行的管理與使用
    主要是三個腳本:
    • 創建topic: 5個主要參數
      –create 表示創建topic
      –partitions 表示指定我們topic的分區書
      –replication-factor 表示指定我們的副本數
      –topic 指定我們topic的名字
      –zookeeper 指定我們zookeeper的地址

    • 創建producer發送數據: 指定kafka集羣地址和topic;然後發送數據
      –broker-list 指定我們kafka集羣的地址
      –topic 指定我們的消息發送到哪個topic裏面去

    • 創建consumer:接收數據。
      –bootstrap-server 表示我們的kafak集羣的地址
      –from-beginning 表示我們從最開始的數據進行消費
      –topic指定我們topic的名字

注:如果有亂碼的話,可能是因爲src客戶端工具亂碼。

5、 kafka的API

這裏就不詳細介紹了…

java API:
創建maven工程、導入jar包。官網裏documentation下有介紹
producer,consumer(注意開啓kafka的offset自動提交功能,保證數據不丟失,可以說自己遇到

問題:kafka Api操作的時候,沒有開啓offset自動提交功能,導致數據丟失)

6、 kafka分區策略( 4 種 )

把消息怎麼存在kafka的topic裏):

   1)手動指定用分區
   2)通過消息的key 進行hash 取模 (注:Key值一定要變,要不造成數據傾斜)  
   3)輪循      實際工作中常用這個均勻放(實現負載均衡)
   4)自定義分區  implements Partitioner(一般不用)

7、kafka的配置文件說明

  • server.properties :(只有這個在linux配,剩下的倆在代碼中配)
    broker標識、監聽端口、處理網絡請求的線程數量、IO數量、緩存區大小、kafka日誌存放路徑、清理 恢復和保存log,index的線程數、 segement大小,時間、本機id、能否刪除topic

  • producer.properties: (一般不用自己寫,整合就有,如果用自己寫,就把紅的配了)
    是否壓縮、設置ACK機制 0、1、-1(工作用1) 、發送消息異步(快,工作上用這個多)還是同步(慢但數據不丟失)、堆積、充實次數…

  • consumer.properties:
    zookeeper地址、多久負載均衡、offset多久更加到zk、組、offset自動提交、最大取多少塊緩存(調優)

8、flume與kafka的整合

Flume 1.8.0 ,看官網。整合的時候,flume就相當於生產者。

  1. 整合後的 配置文件:sources、channel、kafka sink
    注意: 1) 忽略 tmp 用正則表達式粘貼 ; 2) 如果是從windows上傳文件的話,必須得設置格式是GBK,默認是UTF-8)

  2. 爲什麼要flume 採集數據後 要通過 kafka 集羣?
    答:1、解決數據流平緩性問題 ,統一平臺 (可以設置一次性取多少,不會一次性過來太多或者低風期過少)

  3. flume如何採集windowsServer的信息?(因爲flume只能採集linux的)
    答:windowsServer先通過ftp傳到linux,再從linux採集。

9、kafka如何保證數據的不丟失

生產者producer如何保證數據的不丟失

  • 同步模式
    通過ack機制來確認消息已經收到。可以設置,有0、1、-1 取值。
    一般工作用 1 ,parition的主節點保存後確認成功即可;如果是-1,副本和主節點都要確認,效率低點 安全性最高;0 是不用確認。
  • 異步模式
    一批一批的確認,設置 多少時間往磁盤刷新一次數據 和 多少條數據往磁盤刷新一次。
    2)、消費者consumer如何保證數據的不丟失
    消費者一般通過offset偏移量,每次讀取上次的偏移量 來確保數據不丟失。

10、kafkaManager監控工具的安裝與使用(可視化界面)

方法1:docker安裝kafkaManager,參考文章,裏面docker安裝了zk,kafka,kafkamanager:https://blog.csdn.net/qq_18769269/article/details/80880633

方法2:原生的,這裏只是大體說一下。

  • 安裝:上傳壓縮包解壓;修改配置文件(zk地址);後臺啓動kafkaManager 並 指定配置文件位置;從頁面訪問kafkaManager

  • 啓動:(後臺啓動)
    ./kafka-manager -Dconfig.file=/export/servers/kafka-manager-1.3.3.7/conf/application.conf -Dhttp.port=8070 &

  • 查看:1)jps
    2)頁面查看: http://192.168.52.200:8070/

  • 在頁面配置kafka集羣:

    • 出現的問題: 啓動manager後出現如下信息。。。
      This application is already running (Or delete /export/servers/kafka-manager-1.3.0.7/RUNNING_PID file).
      解決辦法:手 動kill掉kafka-mamager進程,然後 刪除RUNNING_PID文件後再重新啓動。

11、kafka爲什麼這麼快:

  • kafka爲什麼快:
    1)順序讀寫文件。比固態盤還快。普通的是隨機存放。
    2)pageCache頁緩存。消息先緩存到pageCache,然後達到一定量再寫入磁盤。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章