一.Kafka概述web
Kafka是Linkedin於2010年12月份建立的開源消息系統,它主要用於處理活躍的流式數據。活躍的流式數據在web網站應用中很是常見,這些活動數據包括頁面訪問量(Page View)、被查看內容方面的信息以及搜索狀況等內容。 這些數據一般以日誌的形式記錄下來,而後每隔一段時間進行一次統計分析。安全
傳統的日誌分析系統是一種離線處理日誌信息的方式,但若要進行實時處理,一般會有較大延遲。而現有的消息隊列系統可以很好的處理實時或者近似實時的應用,但未處理的數據一般不會寫到磁盤上,這對於Hadoop之類,間隔時間較長的離線應用而言,在數據安全上會出現問題。Kafka正是爲了解決以上問題而設計的,它可以很好地進行離線和在線應用。服務器
1.1 Kfka部署結構:併發
1.2 Kafka關鍵字:負載均衡
•Broker : Kafka消息服務器,消息中心。一個Broker能夠容納多個Topic。oop
•Producer :消息生產者,就是向Kafka broker發消息的客戶端。網站
•Consumer :消息消費者,向Kafka broker取消息的客戶端。spa
•Zookeeper :管理Producer,Broker,Consumer的動態加入與離開。設計
•Topic :能夠爲各類消息劃分爲多個不一樣的主題,Topic就是主題名稱。Producer能夠針對某個主題進行生產,Consumer能夠針對某個主題進行訂閱。日誌
•Consumer Group: Kafka採用廣播的方式進行消息分發,而Consumer集羣在消費某Topic時, Zookeeper會爲該集羣創建Offset消費偏移量,最新Consumer加入並消費該主題時,能夠從最新的Offset點開始消費。
•Partition:Kafka採用對數據文件切片(Partition)的方式能夠將一個Topic能夠分佈存儲到多個Broker上,一個Topic能夠分爲多個Partition。在多個Consumer併發訪問一個partition會有同步鎖控制。
(圖2)
1.3 消息收發流程:
•啓動Zookeeper及Broker.
•Producer鏈接Broker後,將消息發佈到Broker中指定Topic上(能夠指定Patition)。
•Broker集羣接收到Producer發過來的消息後,將其持久化到硬盤,並將該消息保留指定時長(可配置),而不關注消息是否被消費。
•Consumer鏈接到Broker後,啓動消息泵對Broker進行偵聽,當有消息到來時,會觸發消息泵循環獲取消息,獲取消息後Zookeeper將記錄該Consumer的消息Offset。
1.4 Kafka特性:
•高吞吐量
•負載均衡:經過zookeeper對Producer,Broker,Consumer的動態加入與離開進行管理。
•拉取系統:因爲kafka broker會持久化數據,broker沒有內存壓力,所以,consumer很是適合採起pull的方式消費數據
•動態擴展:當須要增長broker結點時,新增的broker會向zookeeper註冊,而producer及consumer會經過zookeeper感知這些變化,並及時做出調整。
•消息刪除策略:數據文件將會根據broker中的配置要求,保留必定的時間以後刪除。kafka經過這種簡單的手段,來釋放磁盤空間。
二. Kafka啓動命令:
啓動Zookeeper服務:
zookeeper-server-start.bat ../../config/zookeeper.properties
啓動Broker服務:
kafka-server-start.bat ../../config/server.properties
經過Zookeeper的協調在Broker中建立一個Topic(主題)
kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testTopic
查詢當前Broker中某個指定主題的配置信息
kafka-run-class.bat kafka.admin.TopicCommand --describe --zookeeper localhost:2181 --topic testTopic
啓動一個數據生產者Producer
kafka-console-producer.bat --broker-list localhost:9092 --topic testTopic
啓動一個數據消費者Consumer
kafka-console-consumer.bat --zookeeper localhost:2181 --topic testTopic --from-beginning
Zookeeper配置文件,zookeeper.properties配置片斷
Broker配置文件,server.properties配置片斷