Kafka 教程(二) 集羣搭建和容錯性測試 原

在之前我們已經安裝過kafka,我們直接進行單機多broker搭建。kafka安裝請參考:kafka 教程(一) 第一個實例

爲後續方便我們統一使用hadoop001作爲本臺機器的主機名,並修改hosts將主機名指向127.0.0.1

hostname hadoop001
echo hadoop001 > /proc/sys/kernel/hostname

echo 127.0.0.1 hadoop001 >> /etc/hosts

一:安裝zookeeper

1.下載解壓zookeeper,使用cdh5.7.0版本對應的zookeeper-3.4.5

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
tar -zxvf zookeeper-3.4.5.tar.gz

2.進入zookeeper conf目錄複製一份配置文件模板zoo_sample.cfg並命名爲zoo.cfg

cd zookeeper-3.4.5/conf
cp zoo_sample.cfg zoo.cfg

3.編輯配置文件

修改zookeeper數據目錄爲:/usr/server/tmp/zookeeper,由於我們只啓動單節點的zookeeper 所以端口不需要修改。

# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/server/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.

4.啓動zookeeper

cd ../bin
./zkServer.sh start

打印如下信息可以看到啓動成功

JMX enabled by default
Using config: /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

使用jps或者jps -m查看

jps -m
-------------------------
12867 Jps -m
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg

至此zookeeper安裝啓動成功。

二:kafka集羣搭建

1.進入kafka目錄的config文件夾,複製並修改配置文件,這裏需要修改的位置有三個:

broker.id=1

listeners=PLAINTEXT://:9093

log.dirs=/tmp/kafka-logs-1

broker.id爲broker的唯一標識,使用唯一的id,修改端口號和指定不同的日誌輸出地址

我們創建三個broker,server.porperties文件複製三份,分別命名爲:server-1.porperties,server-2.porperties,server-3.porperties

cp server.properties server-1.properties 
cp server.properties server-2.properties 
cp server.properties server-3.properties 

結果如下圖所示:

2.依次編輯並修改server-1.porperties,server-2.porperties,server-3.porperties三個文件,id分別設爲:1,2,3,端口分別爲:9093,9094,9095,日誌路徑爲:/usr/server/tmp/kafka/kafka-logs-1,/usr/server/tmp/kafka/kafka-logs-2,/usr/server/tmp/kafka/kafka-logs-3


# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1

############################# Socket Server Settings #############################

listeners=PLAINTEXT://:9093

# The port the socket server listens on
#port=9092

# Hostname the broker will bind to. If not set, the server will bind to all interfaces
#host.name=localhost

############################# Log Basics #############################

# A comma seperated list of directories under which to store log files
log.dirs=/usr/server/tmp/kafka/kafka-logs-1

後兩個文件類似,此處不在複述。

3.分別以三份配置文件啓動三個broker,實現單機多broker集羣

回到kafka根目錄執行如下命令

./bin/kafka-server-start.sh config/server-1.properties &
./bin/kafka-server-start.sh config/server-2.properties &
./bin/kafka-server-start.sh config/server-3.properties &

命令後加 & 表示輸出啓動日誌到控制檯以後臺方式啓動,也可以使用 nohup [cmd] & 完全後臺運行,後臺運行的方式可以參考:Linux 後臺運行程序 nohup和& 的使用

執行後使用 jps -m命令查看:

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m

13219 Kafka config/server-1.properties
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13334 Kafka config/server-3.properties
13401 Jps -m
13277 Kafka config/server-2.properties

可以看到已經啓動的三個broker

至此單機多broker集羣配置完成,多機多集羣可以參考單機多broker類似

三:容錯測試

1.先創建一個topic

./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic hello-mrpei

提示:

Created topic "hello-mrpei".

成功的創建了一個 名稱爲“hello-mrpei”的topic

下面我們查看一下這個topic的相關信息

./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei

可以看到如下信息:

Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

topic名稱  分區數爲:1 副本數爲:3  leader節點爲:2  副本爲 :2,,1,3  存活的副本:2,1,3

2.創建控制檯生成者和消費者 生成和消費消息

啓動一個新的終端,創建生產者producer,向hello-mrpei topic寫數據

./bin/kafka-console-producer.sh --broker-list hadoop001:9093 --topic hello-mrpei

創建消費者,消費hello-mrpei topic的消息

啓動一個新的終端,進入kafka目錄,啓動控制檯消費者

./bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic hello-mrpei

--from-beginning表示消費歷史消息

發送可接收消息正常

發送:

接收:

3.容錯測試

通過強制終止部分broker進程,查看kafka的穩定性。

首先查看當前topic的信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

通過jps -m查看當前運行的kafka進程

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties
14026 Jps -m
13484 Kafka config/server-1.properties

使用kill命令結束進程號爲13484的broker節點1

kill -9 13484

jps -m查看到broker 1 已經結束

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
14089 Jps -m
13706 Kafka config/server-3.properties
[root@hadoop001 kafka_2.11-0.9.0.0]# 

查看topic信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 2	Replicas: 2,1,3	Isr: 2,3

可以看到 Isr 存活的節點爲:2,3

發送消息測試

生產者:

消費者:

可以發現可以正常消費

現在我們再次結束一個broker進程,這次選擇結束leader節點,即節點 2

jps -m查看進程

[root@hadoop001 kafka_2.11-0.9.0.0]# jps -m
13649 Kafka config/server-2.properties
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties
14124 Jps -m

結束節點 2

kill -9 13649
jps -m

------------
13939 ConsoleConsumer --zookeeper localhost:2181 --from-beginning --topic hello-mrpei
14004 ConsoleProducer --broker-list localhost:9093 --topic hello-mrpei
14148 Jps -m
12838 QuorumPeerMain /usr/server/zookeeper-3.4.5/bin/../conf/zoo.cfg
13706 Kafka config/server-3.properties

查看topic信息:

[root@hadoop001 kafka_2.11-0.9.0.0]# ./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello-mrpei
Topic:hello-mrpei	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: hello-mrpei	Partition: 0	Leader: 3	Replicas: 2,1,3	Isr: 3

可以看到 Isr 存活的節點只剩下節點3,此時leader已經變爲節點3,此次省去選舉過程介紹。

消費測試:

生產者:

消費者:

消費仍然正常。

自此,kafka容錯高可用測試結束,經過生產環境的驗證kafka確實是高可用的消息中間件,今後的生產環境可以根據需要選用kafka。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章