Kafka常用命令(1):kafka-topics

时间:2024-04-03 10:14:48

概述

kafka的命令主要安装在kafka的安装目录下的bin路径下,其中kafka-topics.sh主要包括对Topic的一些操作命令;可以使用 “–help”参数查看命令详细信息。

查看详细帮助信息:
在进入kafka安装目录后执行如下命令
bin/kafka-topics.sh --help
执行结果:从结果可以看到kafka-topics.sh命令主要支持: –list, --describe, --create, --alter or --delete 五种操作
Kafka常用命令(1):kafka-topics

1. 创建Topic: --create

bin/kafka-topics.sh --create --zookeeper:2181 --topic topic_test_002 --partitions 10  --replication-factor 3

参数说明

  1. –create :表示创建操作;
  2. –zookeeper: 指定kafka配置的Zookeeper集群,这里是zk-node01:2181,指定任意一个节点+端口;(hostName:port 或者 ip:port均可,也可以指定多个节点)
  3. –topic: 指定topic的名字,这里是创建名为 topic_test_002的topic
  4. –partitions:指定topic的分区数量,也就是put到这个topic的数据会分到10个分区中;
  5. –replication-factor:指定副本数量,这里设置3,也就是这个topic的数据数据会存储3个副本中;
    (下面在执行describe会详细介绍)

执行结果
Kafka常用命令(1):kafka-topics在执行时遇到一个警告,在这里选择忽略;
警告:
Due to limitations in metric names, topics with a period (’.’) or underscore (’_’) could collide. To avoid issues it is best to use either, but not both.


翻译:
由于度量名称的限制,带有句点(’.’)或下划线(’_’)的主题可能会发生冲突。为了避免问题,最好使用其中之一,但不是两者都使用。

2. 查看Topic详细信息: --describe

bin/kafka-topics.sh --describe --zookeeper datalake-master:2181 --topic topic_test_002

参数说明

  1. –describe:表示查看topic详细信息操作
  2. –zookeeper: 指定kafka配置的Zookeeper集群
  3. –topic: 指定要查看的topic的名字

执行结果:
Kafka常用命令(1):kafka-topics
可以看出“topic_test_002”共有10个分区(partition 0 ~ 9);均匀分布在5个Broker上(1~5);并且副本均匀分布在不同的Broker上;如:分区:Partition 0,leader是Broker 5,副本分布在 Broker,5,4,1上;

3. 查看Topic列表: --list

bin/kafka-topics.sh --list --zookeeper datalake-master:2181

参数说明

  1. –list:表示要执行的操作是查看全部topic列表
  2. –zookeeper: 指定kafka配置的Zookeeper集群

4.修改Topic: --alter

将partition数量从10改为20

bin/kafka-topics.sh --alter --zookeeper zk-node01:2181 --topic topic_test_002 --partitions 20

执行结果:
Kafka常用命令(1):kafka-topics
再次使用describe查看topic详情:发现变成了20个Partition
Kafka常用命令(1):kafka-topics

注意:
alter 可以修改Partition数量,但是只能从小往大改,不能从大往小改!

Kafka常用命令(1):kafka-topics

5.删除Topic: --delete

bin/kafka-topics.sh --delete --zookeeper zk-node01:2181 --topic topic_test_002

执行结果
注意:执行delete并不能真正删除topic,只是将其标记为删除!
Kafka常用命令(1):kafka-topics
执行List命令后发现,这个topic也仅仅是被标记为删除:
Kafka常用命令(1):kafka-topics
如果想要真正的删除还需要在Zookeeper中删除元数据信息,具体操作如下:

  1. 启动Zookeeper客户端

    bin/zkCli.sh
    
  2. 找到topic所在目录

    ls /brokers/topics
    
  3. 删除对应的topic

    rmr /brokers/topics/topic_test_002
    

    再次执行list,发现topic_test_002已经不再列表中;