訊息中介軟體Kafka+Zookeeper叢集簡介、部署和實踐
Kafka是一種高吞吐量的 分散式 釋出訂閱訊息系統,它可以處理消費者規模的網站中所有動作流資料。Kafka的目的是通過 Hadoop 並行載入機制統一線上和離線訊息處理,並通過 叢集 提供實時訊息。本文內容較基礎,主要圍繞kafka的體系架構和功能展開。
正文開始之前,我們先了解一下Kafka中涉及的相關術語:
1、Broker——Kafka叢集包含一個或多個伺服器,這種伺服器被稱為broker ;
2、Topic——每條釋出到Kafka叢集的訊息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的訊息分開儲存,邏輯上一個Topic的訊息雖然儲存於一個或多個broker上但使用者只需指定訊息的Topic即可生產或消費資料而不必關心資料存於何處)
3、Partition——Partition是物理上的概念,每個Topic包含一個或多個Partition.
4、Producer——負責釋出訊息到Kafka broker
5、Consumer——訊息消費者,向Kafka broker讀取訊息的客戶端。
6、Consumer Group——每個Consumer屬於一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name則屬於預設的group)。
Kafka的topic可以看做是一個記錄流 ("/orders", "/user-signups"),每個topic都有一個日誌,它儲存在磁碟上。每個topic又被分成多個partition(區),每個partition在儲存層面是append log檔案,任何釋出到partition的訊息都會被直接追加到日誌檔案的尾部,Kafka Producer API用於生成資料記錄流,Kafka Consumer API用於使用Kafka的記錄流。
Kafka架構:Topic、Partition、Producer、Consumer
通常,一個普通的工作流程是Kafka的producer向topic寫入訊息,consumer從topic中讀取訊息。topic與日誌相關聯,日誌是儲存在磁碟上的資料結構,Kafka將producer的記錄附加到topic日誌的末尾。topic日誌由分佈在多個檔案上的許多分割槽組成,這些檔案可以分佈在多個Kafka叢集節點上。Kafka在叢集的不同節點上分發topic日誌分割槽,以實現具有水平可伸縮性的高效能。Spreading 分割槽有助於快速寫入資料,Kafka將分割槽複製到許多節點以提供故障轉移。
如果多個producer和consumer同時讀取和寫入相同的Kafka主題日誌,Kafka如何擴充套件?首先,Kafka本身的寫入速度很快,順序寫入檔案系統本身就不需要太多時間;其次,在現代的快速驅動器上,Kafka可以輕鬆地每秒寫入700 MB或更多位元組的資料。
叢集部署和測試
Kafka使用ZooKeeper管理叢集,ZooKeeper用於協調伺服器或叢集拓撲,ZooKeeper是配置資訊的一致性檔案系統。你可以選擇Kafka自帶的Zookeeper,也可以選擇單獨部署,一臺Linux主機開放三個埠即可構建一個簡單的偽ZooKeeper叢集。
ZooKeeper可以將拓撲更改傳送到Kafka,如果叢集中的某臺伺服器當機或者某個topic被新增、刪除,叢集中的每個節點都可以知道新伺服器何時加入,ZooKeeper提供Kafka Cluster配置的同步檢視。Kafka和ZooKeeper的搭建都需要java環境,對於jdk的下載安裝本文不過多贅述,可以自行網上查詢,二者的安裝包也可以在Apache官網自行下載。自建Zookeeper叢集的配置過程如下:
建立目錄 ZooKeeper:mkdir zookeeper
拷貝最少三個例項,進入ZooKeeper目錄,其他例項進行同樣的操作:
建立目錄zkdata、zkdatalog
進入conf目錄,
拷貝zoo_sample.cfg 為zoo.cfg,詳細配置如下:
Java程式碼
使用Kafka自帶的ZooKeeper叢集:
檢視配置檔案
進入Kafka的config的目錄:
先建立zk叢集,直接使用Kafka自帶的ZooKeeper建立zk叢集,修改zookeeper.properties檔案:
Kafka伺服器
Kafka叢集由多個Kafka Brokers組成。每個Kafka Broker都有一個唯一的ID(編號)。Kafka Brokers包含主題日誌分割槽,如果希望獲得故障處理能力,需要保證至少有三到五個伺服器,Kafka叢集最大可同時存在10,100或1,000個伺服器。Kafka將每個partition資料複製到多個server上,任何一個partition有一個leader和多個follower(可以沒有);備份的個數可以通過broker配置檔案來設定.當leader失效時,需在followers中選取出新的leader,可能此時follower落後於leader,因此需要選擇一個"up-to-date"的follower。
例如,如果在AWS中執行kafka叢集,其中一個Kafka Broker發生故障,作為ISR(同步副本)的Kafka Broker可以迅速提供資料。
請注意,對於如何設定Kafka叢集本身並沒有硬性規定。例如,可以在單個AZ中設定整個叢集,以便使用AWS增強型網路和放置組獲得更高的吞吐量,然後使用Mirror Maker將叢集映象到同一區域中的熱災備AZ。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2185691/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 訊息中介軟體 — RocketMQ簡介MQ
- 訊息型中介軟體之RabbitMQ叢集MQ
- 訊息中介軟體RabbitMQ_RabbitMQ叢集搭建8MQ
- 搭建JEESZ分散式架構--訊息中介軟體簡介分散式架構
- vivo 超大規模訊息中介軟體實踐之路
- 訊息中介軟體
- 訊息中介軟體客戶端消費控制實踐客戶端
- 中介軟體之訊息中介軟體-pulsar
- centos6下ActiveMQ+Zookeeper訊息中介軟體叢集部署記錄CentOSMQ
- 訊息中介軟體rabbitMQMQ
- 訊息中介軟體—RocketMQ訊息傳送MQ
- lazarus中介軟體簡介
- 分散式訊息中介軟體分散式
- 訊息中介軟體之ActiveMQMQ
- 訊息中介軟體選型
- vivo 訊息中介軟體測試環境專案多版本實踐
- 訊息中介軟體RabbitMQ可靠性投遞與生產實踐MQ
- [分散式][訊息中介軟體]訊息中介軟體如何實現每秒幾十萬的高併發寫入分散式
- 訊息中介軟體 — 使用場景
- PHP 訊息中介軟體 工具庫PHP
- 解析訊息中介軟體之RabbitMQMQ
- 如何設計一個簡單的訊息中介軟體
- C#中的訊息中介軟體(RabbitMQ 和 Redis)C#MQRedis
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- 常見訊息中介軟體之RocketMQMQ
- 常見訊息中介軟體之ActiveMQMQ
- 深入訊息中介軟體選型分析
- MySQL中介軟體之ProxySQL(1):簡介和安裝MySql
- 訊息中介軟體—RocketMQ訊息消費(三)(訊息消費重試)MQ
- 訊息中介軟體—RocketMQ的RPC通訊(一)MQRPC
- 從通訊開始聊聊訊息中介軟體
- 簡單介紹redux的中介軟體Redux
- 訊息中介軟體—Kafka 的設計思想Kafka
- 訊息中介軟體(RabbitMq、Kafka)分析比較MQKafka
- 訊息中介軟體通用化封裝封裝
- MQ系列:訊息中介軟體執行原理MQ
- 訊息中介軟體的應用場景
- 淺談訊息佇列及常見的訊息中介軟體佇列