Kafka入門初探+偽集群部署


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

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

概念介紹

在Kafka中消息隊列分為三種角色:

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

producer

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

broker

Broker可以當做Kafka中的存儲節點,數據按照topic組織,按照某種負載均衡方式分配到不同的分區中。一個Topic由多個分區組成,每個分區可以設置備份數量。分區由一個leader+多個followers組成,生產者直接與leader進行溝通,leader接收消息后,其他的followers會同步這個消息。所有的follwers同步消息后,該消息才會成為可消費的狀態。

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

consumer

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

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

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

  • 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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM