君子性非異也 善假於物也
一、Kafka簡介
Kafka是一個分散式的訊息佇列系統(Message Queue)。
kafka叢集有多個Broker伺服器組成,每個型別的訊息被定義為topic。
同一topic內部的訊息按照一定的key和演算法被分割槽(partition)儲存在不同的Broker上。
訊息生產者producer和消費者consumer可以在多個Broker上生產/消費topic
概念理解:
Ø Topics and Logs:
Topic即為每條釋出到Kafka叢集的訊息都有一個類別,topic在Kafka中可以由多個消費者訂閱、消費。
每個topic包含一個或多個partition(分割槽),partition數量可以在建立topic時指定,每個分割槽日誌中記錄了該分割槽的資料以及索引資訊。如下圖:
Kafka只保證一個分割槽內的訊息有序,不能保證一個主題的不同分割槽之間的訊息有序。如果你想要保證所有的訊息都絕對有序可以只為一個主題分配一個分割槽。
分割槽會給每個訊息記錄分配一個順序ID號(偏移量), 能夠唯一地標識該分割槽中的每個記錄。Kafka叢集保留所有釋出的記錄,不管這個記錄有沒有被消費過,Kafka提供相應策略通過配置從而對舊資料處理。
實際上,每個消費者唯一儲存的元資料資訊就是消費者當前消費日誌的位移位置。位移位置是由消費者控制,即、消費者可以通過修改偏移量讀取任何位置的資料。
Ø Distribution -- 分散式
Ø Producers -- 生產者
指定topic來發送訊息到Kafka Broker
Ø Consumers -- 消費者
根據topic消費相應的訊息
二、Kafka叢集部署
叢集規劃:
Zookeeper叢集共三臺伺服器,分別為:node1、node2、node3。
Kafka叢集共三臺伺服器,分別為:node1、node2、node3。
1、Zookeeper叢集準備
kafka是一個分散式訊息佇列,需要依賴ZooKeeper,請先安裝好zk叢集。
Zookeeper叢集安裝步驟略。
2、安裝Kafka
解壓:
tar zxvf kafka_2.10-0.9.0.1.tgz -C /opt/
mv kafka_2.10-0.9.0.1/ kafka
修改配置檔案:config/server.properties
核心配置引數說明:
broker.id: broker叢集中唯一標識id,0、1、2、3依次增長(broker即Kafka叢集中的一臺伺服器)
注:
當前Kafka叢集共三臺節點,分別為:node1、node2、node3。對應的broker.id分別為0、1、2。
zookeeper.connect: zk叢集地址列表
將當前node1伺服器上的Kafka目錄同步到其他node2、node3伺服器上:
scp -r /opt/kafka/ node2:/opt
scp -r /opt/kafka/ node3:/opt
修改node2、node3上Kafka配置檔案中的broker.id(分別在node2、3伺服器上執行以下命令修改broker.id)
sed -i -e 's/broker.id=.*/broker.id=1/' /opt/kafka/config/server.properties
sed -i -e 's/broker.id=.*/broker.id=2/' /opt/kafka/config/server.properties
3、啟動Kafka叢集
A、啟動Zookeeper叢集。
B、啟動Kafka叢集。
分別在三臺伺服器上執行以下命令啟動:
bin/kafka-server-start.sh config/server.properties
4、測試
建立話題
(kafka-topics.sh --help檢視幫助手冊)
建立topic:
bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --create --replication-factor 2 --partitions 3 --topic test
(引數說明:
--replication-factor:指定每個分割槽的複製因子個數,預設1個
--partitions:指定當前建立的kafka分割槽數量,預設為1個
--topic:指定新建topic的名稱)
檢視topic列表:
bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --list
檢視“test”topic描述:
bin/kafka-topics.sh --zookeeper node1:2181,node2:2181,node3:2181 --describe --topic test
建立生產者:
bin/kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test
建立消費者:
bin/kafka-console-consumer.sh --zookeeper node1:2181,node2:2181,node3:2181 --from-beginning --topic test
注:
檢視幫助手冊:
bin/kafka-console-consumer.sh help