1. 程式人生 > >kafka(五):Topic的增刪改查操作

kafka(五):Topic的增刪改查操作

1.建立Topic

bin/kafka-topics.sh --create --topic beifeng1 --zookeeper bigdata.ibeifeng.com:2181/kafka08 --partitions 5 --replication-factor 2 

其中:

(1)--replication-factor:副本數目預設不超過3,太多影響網路磁碟io效能(副本數越多,資料越安全,但是不能大於broker的數目)

(2)--partitions:一般為broker服務數目的1--2倍

2.檢視當前kafka叢集中Topic的情況

(1)檢視Topic列表

bin/kafka-topics.sh --list --zookeeper bigdata.ibeifeng.com:2181/kafka08

(2)zk檢視

開啟zk客戶端後

ls /kafka/config/topics

(3)topic資料儲存

由server.properties中log.dirs配置決定

/opt/modules/kafka_2.11-0.10.2.1/data/0

3. 檢視Topic的詳細資訊

bin/kafka-topics.sh --describe --zookeeper bigdata.ibeifeng.com:2181/kafka08

結果:

        Topic:beifeng   PartitionCount:5        ReplicationFactor:2     Configs:
        Topic: beifeng  Partition: 0    Leader: 0       Replicas: 0,1   Isr: 0
        Topic: beifeng  Partition: 1    Leader: 0       Replicas: 1,0   Isr: 0
        Topic: beifeng  Partition: 2    Leader: 0       Replicas: 0,1   Isr: 0
        Topic: beifeng  Partition: 3    Leader: 0       Replicas: 1,0   Isr: 0
        Topic: beifeng  Partition: 4    Leader: 0       Replicas: 0,1   Isr: 0
        Topic:beifeng0  PartitionCount:1        ReplicationFactor:1     Configs:
        Topic: beifeng0 Partition: 0    Leader: 0       Replicas: 0     Isr: 0

其中Isr:當broker的leader宕機後,有機會競選的broker的id!

4. 修改Topic資訊

 bin/kafka-topics.sh --alter --topic beifeng1 --zookeeper bigdata.ibeifeng.com:2181/kafka08 --partitions 6

注意:不能修改replication-factor,以及只能對partition個數進行增加,不能減少 

 

5. 刪除Topic(簡單的刪除,只是標記刪除)

bin/kafka-topics.sh --delete --topic beifeng1  --zookeeper bigdata.ibeifeng.com:2181/kafka08

預設情況下,刪除是標記刪除,沒有實際刪除這個Topic。

 真實刪除這個Topic的兩種方式:

(1)通過delete命令刪除後,手動將本地磁碟以及zk上的相關topic的資訊刪除即可  
ls /kafka/brokers/topics

(2)配置server.properties檔案,給定引數delete.topic.enable=true,表示允許進行Topic的刪除
注意:一般來說,topic建立了之後就不要隨意的刪除和修改資訊

6.topic分割槽partition意義

(1)一個分割槽只能讓(一個消費者組中)一條執行緒消費。(同一個分割槽中的資料,是不可能讓兩條執行緒同時消費的)            
(2)如果,一個topic有3個分割槽,但是消費者只有一個執行緒,則這個消費者消費這3個分割槽的資料。
(3)分割槽數和消費者執行緒數相等的情況下,消費的速度和效能是最好的。(如果,分割槽數大於執行緒數,則有的執行緒消費多個分割槽的資料;如果執行緒大於分割槽,部分執行緒佔據資源不處理資料,浪費資源)
(4)如果某個topic接收的資料量很大,如何增加處理速度?        
            -》增加topic的分割槽數(可以直接增加,資料會重新分佈(已經寫入到磁碟的資料不會變動,新來資料會根據重分佈後的hash碼來分佈到新的分割槽中!)
            -》增加消費者的執行緒(例如:spark消費程式,增加--num-exe或者exe-core)