1 定義
Kafka是一個分佈式消息隊列,是由apache開源的一個消息系統,用scala寫成。
它提供了類似於JMS的特性,但是在設計實現上完全不同,此外它並不是JMS規範的實現。
kafka對消息保存時根據Topic進行歸類,發送消息者成爲Producer,消息接受者成爲Consumer,此外kafka集羣有多個kafka實例組成,每個實例(server)成爲broker。
無論是kafka集羣,還是producer和consumer都依賴於zookeeper來保證系統可用性集羣保存一些meta信息。
2 概念
一個topic可分爲多個partitions,每個partition爲一個目錄,partition命名規則爲:topic名稱+有序序號,序號從0開始,最大值爲partition數量減一。每個partition(目錄)包含多個大小相等的segment數據文件,相當於一個大文件被平均分配到多個大小相等的segment中,每個segment包含多個消息,消息數不一定相同。
topicànpartitions(目錄)
partitionànsegments
segmentàn msgs
一個topic可以被多個group訂閱,topic會發送到所有的group。
topic中的一條特定的消息,只會被訂閱此topic的每個group中的其中一個consumer消費,此消息不會發送給一個group中的多個consumer。
一個consumer可以同時消費多個partition。
kafka保證一個patition中的消息被某個consumer消費時是有序的,不保證patitions之間消息的有序性。
即:一個消息或partition只能被一個consumer消費,消費完就沒了。
同一個group中不能有多餘partitions個數的consumer同時消費,否則某些consumer將無法得到消息。
一個group可以有多個consumer,一個consumer只能屬於一個group。通常情況下,一個group中會包含多個consumer,這樣不僅可以提高topic中消息的併發消費能力,還能提高“故障容錯”性,如果group中的某個consumer失效了,那麼其消費的patitions將會由其他consumer自動接管(觸發kafka的rebalance)。
3 安裝配置
3.1 安裝
上kafaka.apache.org下載、解壓、配置環境變量即完成安裝。kafka依賴zookeeper,需先安裝zookeeper。
環境變量:
export KAFKA_HOME=xxx
export PATH=${KAFKA_HOME}/bin:$PATH
3.2 配置
3.2.1 配置server.properties
各服務器上的server.properties裏的broker.id值不能重複。
host.name爲本機IP,若不改則報錯connection to localhost:port unsuccessful。
3.2.2 配置consumer.properties
3.2.3 配置producer.properties
3.3 啓動
[root@yhnormal kafkahome]#bin/kafka-server-start.shconfig/server.properties