Kafka是目前很是流行的消息隊列中間件,經常使用於作普通的消息隊列、網站的活性數據分析(PV、流量、點擊量等)、日誌的蒐集(對接大數據存儲引擎作離線分析)。網絡
在Kafka中消息隊列分爲三種角色:併發
producer
,即生產者,負責產生日誌數據。broker
,存儲節點,負責按照topic
中的partition
分區,均勻分佈式的存儲分區。consumer
,即消費者,負責讀取使用broker
中的分區。Kafka系統中的生產者,用於產生數據併發送給broker進行存儲。因爲須要與broker中的分區保持socket鏈接,所以須要在zk中維護生產者與分區broker的對應關係。同一個topic下的數據,會以某種負載均衡的方式發送到不一樣的分區中。app
Broker能夠當作Kafka中的存儲節點,數據按照topic組織,按照某種負載均衡方式分配到不一樣的分區中。一個Topic由多個分區組成,每一個分區能夠設置備份數量。分區由一個leader+多個followers組成,生產者直接與leader進行溝通,leader接收消息後,其餘的followers會同步這個消息。全部的follwers同步消息後,該消息纔會成爲可消費的狀態。負載均衡
Broker中Topic與分區,分區與生產者,分區之間的選舉備份等等信息都須要ZK進行協調。socket
Consumer是Kafka中的消費者,一般以組的形式存在,一個Group會包含多個Consumer。每一個組對應一個Topic,該Topic內的分區只能對應一個消費者,也就是若是消費者不少的狀況下,會出現有的消費者消費不到數據;若是消費者不多的狀況下,會有消費者同時消費多個分區的數據。分佈式
Kafka僅僅會保證一個分區的消息的消費是有序的,多個分區並不保證有序性。測試
爲了保證數據消費的可靠性,Kakka提供了幾種消費的機制:fetch
在Kafka中offset是由consumer維護的(實際能夠由zk來完成)。這種機制有兩個好處,大數據
Kafka中的數據的主題,全部的操做(如消息的存儲和讀取\消費)都是依據topic完成。網站
每一個Topic由多個分區組成,每一個分區內部的數據保證了有序性,便是按照時間序列,append到分區的尾部。分區是有固定大小的,容量不夠時,會建立新的分區。Kafka在必定時間內會按期清理過時的文件。
這種連續性的文件存儲,一方面有效的利用磁盤的線性存取;另外一方面減輕了內存的壓力。
在Kafka中不少節點的調度以及資源的分配,都要依賴於zookeeper來完成。
如:
部署僞集羣環境,即單節點環境很是簡單。下載部署文件,解壓後,直接運行便可。
運行命令以下:
# 啓動zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties & # 啓動kafka bin/kafka-server-start.sh config/server.properties &
若是想要測試,能夠啓動測試程序:
# 啓動生產者測試程序 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test # 啓動消費者測試程序 ./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
在生產者界面輸入的內容,就能夠直接在消費者界面中看到了。