Kafka入門初探+僞集羣部署

Kafka是目前很是流行的消息隊列中間件,經常使用於作普通的消息隊列、網站的活性數據分析(PV、流量、點擊量等)、日誌的蒐集(對接大數據存儲引擎作離線分析)。網絡

所有內容來自網絡,可信度有待考證!若有問題,還請及時指正。

概念介紹

在Kafka中消息隊列分爲三種角色:併發

  • producer,即生產者,負責產生日誌數據。
  • broker,存儲節點,負責按照topic中的partition分區,均勻分佈式的存儲分區。
  • consumer,即消費者,負責讀取使用broker中的分區。

producer

Kafka系統中的生產者,用於產生數據併發送給broker進行存儲。因爲須要與broker中的分區保持socket鏈接,所以須要在zk中維護生產者與分區broker的對應關係。同一個topic下的數據,會以某種負載均衡的方式發送到不一樣的分區中。app

broker

Broker能夠當作Kafka中的存儲節點,數據按照topic組織,按照某種負載均衡方式分配到不一樣的分區中。一個Topic由多個分區組成,每一個分區能夠設置備份數量。分區由一個leader+多個followers組成,生產者直接與leader進行溝通,leader接收消息後,其餘的followers會同步這個消息。全部的follwers同步消息後,該消息纔會成爲可消費的狀態。負載均衡

Broker中Topic與分區,分區與生產者,分區之間的選舉備份等等信息都須要ZK進行協調。socket

consumer

Consumer是Kafka中的消費者,一般以組的形式存在,一個Group會包含多個Consumer。每一個組對應一個Topic,該Topic內的分區只能對應一個消費者,也就是若是消費者不少的狀況下,會出現有的消費者消費不到數據;若是消費者不多的狀況下,會有消費者同時消費多個分區的數據。分佈式

Kafka僅僅會保證一個分區的消息的消費是有序的,多個分區並不保證有序性。測試

爲了保證數據消費的可靠性,Kakka提供了幾種消費的機制:fetch

  • 1 at most once,即消費數據後,保存offset,就再也取不到這個數據了。
  • 2 at least once,即消費數據後,保存offset,若是保存出錯,下次可能還會取到該數據
  • 3 exactly once,待查閱

在Kafka中offset是由consumer維護的(實際能夠由zk來完成)。這種機制有兩個好處,大數據

  • 一個是能夠依據consumer的能力來消費數據,避免產生消費數據的壓力;
  • 另外一個就是能夠自定義fetch消費的數據數目,能夠一次讀取1條,也能夠1次讀取100條。

topic

Kafka中的數據的主題,全部的操做(如消息的存儲和讀取\消費)都是依據topic完成。網站

partition

每一個Topic由多個分區組成,每一個分區內部的數據保證了有序性,便是按照時間序列,append到分區的尾部。分區是有固定大小的,容量不夠時,會建立新的分區。Kafka在必定時間內會按期清理過時的文件。

這種連續性的文件存儲,一方面有效的利用磁盤的線性存取;另外一方面減輕了內存的壓力。

zookeeper

在Kafka中不少節點的調度以及資源的分配,都要依賴於zookeeper來完成。
如:

  • 1 Broker的註冊,保存Broker的IP以及端口;
  • 2 Topic註冊,管理broker中Topic的分區以及分佈狀況
  • 3 Broker的負載均衡,講Topic動態的分配到broker中,經過topic的分佈以及broker的負載判斷
  • 4 消費者,每一個分區的消息僅發送給一個消費者(不知道跟zookeeper有啥關係)
  • 5 消費者與分區的對應關係,存儲在zk中
  • 6 消費者負載均衡,一旦消費者增長或者減小,都會觸發消費者的負載均衡
  • 7 消費者的offset,High level中由zk維護offset的信息;Low Level中由本身維護offset

僞集羣環境的搭建

部署僞集羣環境,即單節點環境很是簡單。下載部署文件,解壓後,直接運行便可。

運行命令以下:

# 啓動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

在生產者界面輸入的內容,就能夠直接在消費者界面中看到了。

相關文章
相關標籤/搜索