Kafka 是一個高吞吐、分布式、基於發布訂閱的消息系統,利用Kafka技術可在廉價PC Server上搭建起大規模消息系統。Kafka具有消息持久化、高吞吐、分布式、多客戶端支持、實時等特性,適用於離線和在線的消息消費
Kakfa特點:
- 解耦:消息系統在處理過程中插入一個隱含、基於數據的接口層。
- 冗余:消息隊列持久化,防止數據丟失。
- 擴展性:消息隊列解耦處理過程,容易擴展處理過程。
- 可恢復性:處理過程失效,恢復后可繼續處理。
- 順序保證:消息隊列保證順序。Kafka保證一個Partition內消息有序。
- 異步通信:消息隊列允許消息加入隊列,等需要時再處理。
Kafka 的術語

Kafka 架構
典型Kafka架構

一個典型的Kafka集群中包含若干Producer(可以是web前端應用產生的消息,也可以是類似通過上網Flume收集上網日志產生的Events等),若干broker(Kafka支持水平擴展,一般broker數量越多,集群吞吐率越高),若干Consumer Group,以及一個Zookeeper集群。Kafka通過Zookeeper管理集群配置及服務協同。Producer使用push模式將消息發布到broker,Consumer通過監聽使用pull模式從broker訂閱並消費消息。
多個broker協同合作,producer和consumer部署在各個業務邏輯中被頻繁的調用,三者通過zookeeper管理協調請求和轉發。這樣一個高性能的分布式消息發布和訂閱系統就完成了。圖上有個細節需要注意,producer刡broker的過程是push,也就是有數據就推送給broker,而consumer給broker的過程是pull,是通過consumer主動去拉數據的,而不是broker把數據主動發送給consumer端的。
producer、consumer、broker以及zookeeper返四者的關系

我們看上面的圖,我們把broker的數量減少,叧有一台。現在假設我們按照上圖進行部署:
Server-1 broker其實就是kafka的server,因為producer和consumer都要去連它。Broker主要還是做存儲用。
Server-2是zookeeper的server端,zookeeper的具體作用你可以去上網查,在這里你可以先想象,它維持了一張表,記錄了各個節點的IP、端口等信息(以后還會講到,它里面還存了kafka的相關信息)。
Server-3、4、5他們的共同之處就是都配置了zkClient,更明確的說,就是運行前必須配置zookeeper的地址,道理也很簡單,這之間的連接都是需要zookeeper來進行分發的。
Server-1和Server-2的關系,他們可以放在一台機器上,也可以分開放,zookeeper也可以配集群。目的是防止某一台掛了。
簡單說下整個系統運行的順序:
1. 啟動zookeeper的server
2. 啟動kafka的server
3. Producer如果生產了數據,會先通過zookeeper找到broker,然后將數據存放進broker
4. Consumer如果要消費數據,會先通過zookeeper找對應的broker,然后消費。
