1. kafka介紹
1.1. 主要功能
根據官網的介紹,ApacheKafka®是一個分佈式流媒體平臺,它主要有3種功能:
1:It lets you publish and subscribe to streams of records.發佈和訂閱消息流,這個功能類似於消息隊列,這也是kafka歸類爲消息隊列框架的原因
2:It lets you store streams of records in a fault-tolerant way.以容錯的方式記錄消息流,kafka以文件的方式來存儲消息流
3:It lets you process streams of records as they occur.可以再消息發佈的時候進行處理
1.2. 使用場景
1:Building real-time streaming data pipelines that reliably get data between systems or applications.在系統或應用程序之間構建可靠的用於傳輸實時數據的管道,消息隊列功能
2:Building real-time streaming applications that transform or react to the streams of data。構建實時的流數據處理程序來變換或處理數據流,數據處理功能
1.3. 詳細介紹
Kafka目前主要作爲一個分佈式的發佈訂閱式的消息系統使用,下面簡單介紹一下kafka的基本機制
1.3.1 消息傳輸流程
Producer即生產者,向Kafka集羣發送消息,在發送消息之前,會對消息進行分類,即Topic,上圖展示了兩個producer發送了分類爲topic1的消息,另外一個發送了topic2的消息。
Topic即主題,通過對消息指定主題可以將消息分類,消費者可以只關注自己需要的Topic中的消息
Consumer即消費者,消費者通過與kafka集羣建立長連接的方式,不斷地從集羣中拉取消息,然後可以對這些消息進行處理。
從上圖中就可以看出同一個Topic下的消費者和生產者的數量並不是對應的。
1.3.2 kafka服務器消息存儲策略
談到kafka的存儲,就不得不提到分區,即partitions,創建一個topic時,同時可以指定分區數目,分區數越多,其吞吐量也越大,但是需要的資源也越多,同時也會導致更高的不可用性,kafka在接收到生產者發送的消息之後,會根據均衡策略將消息存儲到不同的分區中。
在每個分區中,消息以順序存儲,最晚接收的的消息會最後被消費。
1.3.3 與生產者的交互
生產者在向kafka集羣發送消息的時候,可以通過指定分區來發送到指定的分區中
也可以通過指定均衡策略來將消息發送到不同的分區中
如果不指定,就會採用默認的隨機均衡策略,將消息隨機的存儲到不同的分區中
1.3.4 與消費者的交互
在消費者消費消息時,kafka使用offset來記錄當前消費的位置
在kafka的設計中,可以有多個不同的group來同時消費同一個topic下的消息,如圖,我們有兩個不同的group同時消費,他們的的消費的記錄位置offset各不相同,不互相干擾。
對於一個group而言,消費者的數量不應該多餘分區的數量,因爲在一個group中,每個分區至多隻能綁定到一個消費者上,即一個消費者可以消費多個分區,一個分區只能給一個消費者消費
因此,若一個group中的消費者數量大於分區數量的話,多餘的消費者將不會收到任何消息。
2. Kafka安裝與使用
2.1. 下載
你可以在kafka官網 http://kafka.apache.org/downloads下載到最新的kafka安裝包,選擇下載二進制版本的tgz文件,根據網絡狀態可能需要fq,這裏我們選擇的版本是0.11.0.1,目前的最新版
一、安裝
1、kafka 需要java環境;
2、kafka 最新版本內置了 zookeeper,所以不需要安裝zookeeper;
3、下載kafka最新版本,點擊下載,因爲下載的是tgz文件,所以不需要安裝,解壓到相應的地方就可以了。
4、bin 目錄下放的是啓動kafka的文件,conf目錄下放的是kafka的各種配置文件。
二、運行
簡單demo測試,不需要修改任何配置文件,只需要知道 zookeeper的默認端口是2181,生產者的默認端口是9092。
(可在conf/producer.properties和conf/zookeeper.properties下進行修改)
1、啓動zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
2、啓動kafka
bin\windows\kafka-server-start.bat config\server.properties
3、創建主題topic,topic = test
bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
-- 查看創建的topic
bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
4、啓動生產者 producer
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test
啓動生產者之後進入編輯頁面,發送了 "nihao",
5、啓動消費者 customer
bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic demo --from-beginning
當消費者啓動之後,收到了之前生產者發送的 “nihao”。