1. 程式人生 > 其它 >大資料學習之kafka

大資料學習之kafka

kafka是一個分散式的基於釋出/訂閱模式的訊息佇列,只要應用於大資料實時處理領域

訊息佇列的兩種模式:

  點對點模式(一對一 消費者主動拉取資料,訊息收到後訊息清除)  

  釋出/訂閱的模式(一對多 消費者消費資料後不會清除資料)

kafka基礎架構(去中心化)

producer:訊息生產者,就是向kafka broker發訊息的客戶端

consumer:訊息消費者,向kafka broker區訊息的客戶端

consumer Group:消費者組,由多個consumer組成 消費組內的消費者負責消費不同分割槽內的資料,一個分割槽只能由一個組內消費者消費,消費者組之間互不干擾,所以有的消費者都屬於同一個消費者組,消費者組是邏輯上的一個訂閱者

broker:一臺kafka伺服器就是一個broker,一個叢集由多個broker組成,一個broker可以包含多個topic

topic:可以理解為一個佇列 生產者和消費者面向的都是一個topic

partition:為實現擴充套件性,一個非常大的topic可以分不到不同的broker上去,一個topic可以分為多個partition,每一個partition是一個有序佇列

replica:副本 為了保證叢集中某個結點發生故障時,該節點上的partition資料不丟失,而且kafka能夠繼續工作,kafka提供了副本機制,一個topic的每個分割槽都有若干副本,一個leader一個follower

leader:生產者傳送資料的物件,以及消費者消費資料的物件都是leader

follower:實時從leader中同步資料,保持和leader資料的同步,leader發生故障時 某個follower會成為新的leader

在配置kafka引數時需要修改的是:

broker的全域性唯一編號,不能重複
broker.id=0
#刪除topic的功能
delete.topic.enable=true

#配置kafka執行日誌的存放路徑
log.dirs=/usr/local/soft/kafka-xx/log

$連線zk的地址
zookeeper.connect=master:2181,node1:2181
,node2:2181


將元件分發到node1和node2上 注意要修改broker編號

kafka啟動命令:

kafka-server-start.sh -daemon /usr/local/soft/kafka_2.11/config/server.properties

檢視當前kafka中所有的topic 命令:

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --list

建立topic的命令:

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --replication-factor 1 --partitions 1 --topic first --create

注意:
  --topic 定義topic的名稱
  --replication-factor 定義副本的個數
  --partitions 定義分割槽數

刪除topic的命令:

kafka-topics.sh --zookeeper master:2181,node1:2181,node2:2181 --topic first --delete

建立生產者生產訊息的命令:

kafka-console-producer.sh --broker-list master:9092,node1:9092,node2:9092 --topic 名稱

建立消費者的命令:

kafka-console-consumer.sh --broker-list --zookeeper master:9092,node1:9092,node2:9092 --topic 名稱

檢視某個某刻topic的詳情:

kafka-topics.sh --zookeeper master:2180 --describe --topic  名稱

修改分割槽數:

kafka-topics.sh --zookeeper master:2181 --alter --topic 名稱  --partition 2

kafka工作流程及檔案儲存機制

kafka中訊息是以topic進行分類的,生產者生產訊息,消費者消費訊息,都是面向topic

topic是邏輯上的邏輯,而partition是物理上的概念,每個partition對應一個log檔案,該log檔案中儲存的就是producer生產的資料 Producer 生產的資料會被不斷追加到該log 檔案末端,且每條資料都有自己的 offset。消費者組中的每個消費者,都會實時記錄自己消費到了哪個 offset,以便出錯恢復時,從上次的位置繼續消費

 kafka檔案的儲存機制:

一個topic分為兩個partition,一個partition分為多個segment,一個segment對應兩個檔案

由於生產者生產的訊息會不斷追加到 log 檔案末尾,為防止 log 檔案過大導致資料定位效率低下,Kafka 採取了 分片和 索引機制,將每個 partition 分為多個 segment。每個 segment對應兩個檔案——“.index”檔案和“.log”檔案。這些檔案位於一個資料夾下,該資料夾的命
名規則為:topic 名稱
+分割槽序號。例如,first 這個 topic 有三個分割槽,則其對應的資料夾為 first-0,first-1,first-2

“.index”檔案儲存大量的索引資訊,“.log”檔案儲存大量的資料,索引檔案中的元資料指向對應資料檔案中 message 的物理偏移地址