本次實驗的kafka集群有三個節(jié)點漫拭,即有三個broker。
一、Topic 的增刪查
Topic操作的執(zhí)行腳本在bin目錄下的 kafka-topics.sh
1.查看當前服務(wù)器中已存在的topic
# --list --zookeeper
[root@node01 bin]# ./kafka-topics.sh --list --zookeeper node01:2181
2.新增topic
# --create 新增操作
# --topic 定義topic名稱
# --partitions 定義分區(qū)數(shù)
# --replication-factor 定義副本數(shù)
[root@node01 bin]# ./kafka-topics.sh --create --zookeeper node01:2181 --topic first --partitions 2 --replication-factor 2
例子中創(chuàng)建名為first的topic,2個分區(qū)佛点,2個副本。
創(chuàng)建后可分別在三個節(jié)點下黎比,進入kafka的存放數(shù)據(jù)的目錄超营,查看topic的創(chuàng)建情況:first-0和first-1是以topic名和分區(qū)號組成,代表了2個分區(qū)阅虫;每個分區(qū)副本都是2個演闭,而且相同分區(qū)副本是放在不同的節(jié)點上的,例如first-0的副本在node01和node03節(jié)點上颓帝,first-1的副本在node01和node02上米碰。
如何定義分區(qū)數(shù)和副本數(shù)?
一般而言购城,kafka集群的擁有越多的分區(qū)也意味著可以獲取更高的吞吐吕座。
kafka集群內(nèi)部的副本機制,可以保證高可用瘪板。一個分區(qū)如果有多個副本吴趴,每個副本將會存儲到不同的broker上,副本被設(shè)計為leader和follow副本侮攀。副本數(shù)不能超過broker數(shù)锣枝。
3.刪除topic
# --delete 刪除操作
# --topic 指定需要刪除的topic
[root@node01 bin]# ./kafka-topics.sh --delete --zookeeper node01:2181 --topic first
Topic first is marked for deletion. //這個topic被標記刪除
Note: This will have no impact if delete.topic.enable is not set to true.如果delete.topic.enable //這個屬性不設(shè)置為true的話,將不會真正的刪除topic
查看數(shù)據(jù)目錄下的topic是否被刪除:發(fā)現(xiàn)topic名稱后面多了delete刪除標志兰英,不要著急撇叁,等過會來看這個topic就會被刪除。
遇到topic只是被標記為刪除箭昵,不是真正刪除税朴,應(yīng)怎么解決?
方案一:需要在server.properties中設(shè)置delete.topic.enable=true家制,重啟kafka正林。
方案二:手動刪除
1)刪除zookeeper上topic的數(shù)據(jù)
/brokers/ids/topics/xxx
/config/topics/xxx
2) 刪除該topic所有partition和replica的數(shù)據(jù)
數(shù)據(jù)在所有broker的log.dirs目錄下,文件夾結(jié)構(gòu)是topic-partition的方 式颤殴,直接將該topic的整個文件夾刪除即可
4.查看某個topic的詳情
# --describe 查看詳情操作
[root@node01 bin]# ./kafka-topics.sh --describe --zookeeper node01:2181 --topic second
Topic: second PartitionCount: 2 ReplicationFactor: 3 Configs:
Topic: second Partition: 0 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1
Topic: second Partition: 1 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2
Isr代表的含義是什么觅廓?
二、控制臺生產(chǎn)者和消費者
啟動控制臺生產(chǎn)者
# --broker-list 選擇發(fā)送消息的kafka服務(wù)端
# --topic 指定topic
[root@node01 bin]# ./kafka-console-producer.sh --broker-list node01:9092 --topic second
> //再這里寫入消息
啟動控制臺消費者
# --bootstrap-server 選擇接收消息的kafka服務(wù)端
# --topic 指定topic涵但,接收哪個topic的消息
# --from-beginning:會把first主題中以往所有的數(shù)據(jù)都讀取出來杈绸。根據(jù)業(yè)務(wù)場景選擇是否增加該配置。
[root@node02 bin]# ./kafka-console-consumer.sh --bootstrap-server node01:9092 --topic second --from-beginning
發(fā)送消息
#在生產(chǎn)者窗口輸入消息矮瘟,發(fā)送完成后Control+C退出
>hi
>my first kafka topic
每輸入一條消息瞳脓,消費者窗口會顯示生產(chǎn)者發(fā)出的消息
--broker-list 和 --bootstrap-server有什么區(qū)別?