前面幾篇文章中講了一些關於消息隊列的知識,就每中消息隊列中間件,我們並沒有做詳細的講解,那么,今天我們就來詳細的講解一下消息隊列之一kafka的一些基本的使用與操作。
一、kafka介紹
kafka:是一種高吞吐量的分布式發布訂閱的消息隊列系統,具有高性能和高吞吐率。
1.1術語介紹
Broker
kafka集群包括一個或多個服務器,這種服務器被稱為Broker
Topic
主題:每條發布到kafka集群的消息都有一個類別,這個類別被稱為Topic,(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存於一個或多個broker,但用戶是需要指定消息的Topic即可生產或消費數據,而不必關心數據存於何處)
Partition
分區:Partition是物理上的概念,每個Topic包含一個或多個Partition,(一般kafka節點數cpu的總核數)
Producter
生產者:負責發布消息到kafka broder
Consumer
消費者:從kafka broker讀取消息的客戶端
Consumer Group
消費者組:每個Consumer屬於一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name,則屬於默認的group)。
1.2基本特性
可擴展性
在不需要下線的情況下進行擴展,數據流分區(partition)存儲在多個機器上
高性能
單個broker就能服務上千客戶端,單個broker每秒讀/寫可達美國幾百兆字節,多個brokers組成的集群將達到非常強大的吞吐能力。
性能穩定
無論數據多大,kafka在底層采用了操作系統級別的頁緩存,同時將隨機於操作改為順序寫,再結合Zero-Copy的特性集答的改善了IO性能。
1.3消息格式
一個topic對應一種消息格式,因此消息用topic分類,一個topic代表的消息有一個或多個partition組成,一個partition應該存放在多個servier上,如果只有一個server,就沒有冗余備份,是單機而不是集群;如果有多個server,一個server為leader(領導者),其他server為follower(跟隨者),leader需要接收讀寫請求,follower僅作冗余備份,leader出現故障,會自動選舉一個follower作為leader,保證服務不中斷,每個server都可能扮演一些partition的leader核其partition的follower角色,這樣整個集群就會打到負載均衡的效果。
消息按順序存放,消息順序不可改變,智能追加消息,不能插入,每個消息都有一個offset,用作消息ID,在每個partition中唯一,offset由consumer保存和管理,因此讀取順序實際上是完全由consumer決定的,不一定是線性的,消息有超時日期,過期則刪除。
1.4原理解析
producer創建一個topic時,可以指定topic為幾個partition(默認是1,配置num.partitions),然后會把partition分配到每個broker上,分配的算法是:a個broker,第b個partition分配到b%a的broker上,可以指定由每個partition有幾份副本Replication,副本的分配策略為:第c個副本存儲在第(b+c)%a的broder上,一個partition在每個broker上是一個文件夾,文件夾中的文件命名方式為:topic名稱+有序序號。每個partition中文件是一個個的segment,segment file由.index和.log文件組成,兩個文件的命名規則是,上一個segment file的最后一個offset,這樣,可以快速刪除old文件。
producer向kafka里push數據,會自動的push到所有的分區上,消息是否push成功有幾種情況:1、接受到partition的ack就算成功,2、全部副本都寫成功才算成功;數據可以存儲多久,默認是兩天;producer的數據會先存到緩存中,等大小活時間到達閾值時,flush到磁盤,consumer只能讀到磁盤中的數據。
二、win10下kafka簡單安裝以及使用。
http://kafka.apache.org/quickstart#quickstart_multibroker kafka使用文檔說明
kafka依賴於zookeeper,官網下的kafka內置了zookeeper依賴,
1、進入kafka官網,下載頁面: http://kafka.apache.org/downloads 進行下載,選擇二進制文件,在選擇任意鏡像文件下載。


下載成功后解壓到本地文件夾,我這里解壓到了D盤

2、配置關鍵文件
只需要關注bin目錄和config目錄
在kafka根目錄下,新建data和kafka-logs文件夾,后面要用到,作為kafka快照和日志的存放文件夾

進入到config目錄,修改service.properties里面log.dirs路徑為log.dirs=E:\\Kafka\\kafka_2.12-2.0.0\\kafka-logs(注意:文件夾分隔符一定是“\\”)
修改zookeeper.properties里面dataDir路徑為dataDir=E:\\Kafka\\kafka_2.12-2.0.00\\data

 
【service.properties】

【zookeeper.properties】
3、進行單及實例測試簡單使用
我這里觀景是windows,使用的是路徑E:\\Kafka\kafka_2.12-2.0.0\bin\windows下批處理命令,如果有問題,參見步驟:、
1)啟動kafka內置的zookeeper
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

 
出現binding to port…… 標識zookeeper啟動成功,不關閉頁面
2)kafka服務啟動,成功不關閉頁面
.\bin\windows\kafka-server-start.bat .\config\server.properties

3)創建topic測試主題kafka,成功不關閉頁面
.\bin\windows\kafka-topic.bat --create --zookeeper localhost:2181 --replication-factor 1 --partition 1 --topic test

4)創建生產者生產消息,不關閉頁面
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

5)創建消費者接收消息,不關閉頁面
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning

 
到此,測試結束。對於kafka的使用,本人還是菜鳥一枚,還請高手指點一二。
