kafka2.x常用命令筆記(一)創建topic,查看topic列表、分區、副本詳情,刪除topic,測試topic發送與消費


總結/朱季謙

接觸kafka開發已經兩年多,也看過關於kafka的一些書,但一直沒有怎么對它做總結,借着最近正好在看《Apache Kafka實戰》一書,同時自己又搭建了三台kafka服務器,正好可以做一些總結記錄。

本文主要是記錄如何在kafka集群服務器上創建topic,查看topic列表、分區、副本詳情,刪除topic,測試topic發送與消費,算是最基礎的操作了,當然,不同版本其實指令是有所差異的,本文只針對kafka 2.x版本。雖然這些指令都很簡單,但久不用了,很容易就會忘記,所謂好記性不如爛筆頭,記錄下來會更好。

主要寫給一些剛接觸kafka的小白,大神請自行繞路。

最后,推薦兩本寫kafka的書,我覺得挺不錯的,一本是關於原理的《深入理解kafka:核心設計與實踐原理》,一本就是我現在在看的,比較偏實際開發工作的《Apache Kafka實戰》。這兩本我覺得比較容易看懂,當然,我是先看的第一本,當時記錄了一堆筆記,筆記目前放在我的GitHub上:https://github.com/z924931408/Learning-Notes-document
image

我會一步一步記錄,從簡到原理。

1、創建一個名為test-topic的topic,該topic有3個分區,每個分區分配3個副本——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --create --topic test-topic --partitions 3 --replication-factor 3

創建成功時,會提示:Created topic test-topic.

2、查看kafka集群已有topic列表——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 -list

查詢情況會顯示出所有的topic名——

image

3、查看topic的分區與備份詳細情況——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --describe --topic test-topic

例如,我在虛擬機上查看如下
image

PartitionCount:表示總共有3個分區;

ReplicationFactor:表示每個分區有3個副本備份;

該kafka集群分布部署在三台機器上,三個節點的id分別為0,1,2。截圖當中,顯示有0,1,2的字樣,即分別代表了三台節點服務器,說明該test-topic三個分區各自均勻分配在三台機器上,分區的leader副本與三個follower副本同樣均勻在三台機器上,這能起到防止數據丟失的作用。

最后,還有一個ISR,該參數全稱,in-sync replica,它維護了一個集合,例如截圖里的2,0,1,代表2,0,1副本保存的消息日志與leader 副本是保持一致的,只有保持一致的副本(包括所有副本),才會被維護在ISR集合里,當出現一定程度的不同步時,就會將該對應已經不一致的副本移出ISR集合,但是,這種移出並非永久的,一旦被移出的副本慢慢又恢復與leader一樣時,那么,又會被加回isr集合當中。注意一點,只有在這個ISR里的副本服務器,才能在leader出現問題時有機會被選舉為新的leader。

4、刪除topic——

./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 --delete --topic test-topic

執行該語句后,會顯示以下信息——

Topic test-topic is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

翻譯過來,就是說,主題test-topic標記為刪除,但如果delete.topic.enable未設置為true,這將沒有影響。

也就是說,如果delete.topic.enable未設置為true,即使執行了該語句,但也不會被刪除,只會被標記一個刪除狀態而已,該delete.topic.enable參數在1.0.0版本后都是默認true,可以通過./kafka-topics.sh --zookeeper zk1:2181,zk2:2181,zk3:2181 -list指令查看,發現確實已經被刪除了,當刪除topic時,會將topic分區及備份所有數據都刪除完,注意一點,這種刪除是異步的。

5、驗證集群消息發送與消費

kafka默認提供了兩個腳本:kafka-console-producer.sh與kafka-console-consumer.sh。

可以直接使用這兩個腳本驗證集群是否能正常發送消息與消費消息。
image

開啟一個生產者——

 ./kafka-console-producer.sh --broker-list kafka1:9092, kafka2:9092, kafka3:9092 --topic test-topic2

在其他兩台機器上分別開啟兩個消費者——

 ./kafka-console-consumer.sh --bootstrap-server  kafka1:9092, kafka2:9092, kafka3:9092 --topic test-topic2 --from-beginning

大概效果如下——

生產者:
image

消費者:

image


免責聲明!

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



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