Kafka topic 常用命令介绍

[attach]1472[/attach] 本文主要记录平时kafka topic命令常使用的命令集,包括listTopic,createTopic,deleteTopic和describeTopic和alertTopic等,我这里是基于kafka 0.8.1.1版本,具体情况如下所示。   一、 describe topic 显示topic详细信息
# ./kafka-topics.sh --describe --zookeeper localhost:2181
Topic:mobTopic	PartitionCount:4	ReplicationFactor:1	Configs:
	Topic: mobTopic	Partition: 0	Leader: 0	Replicas: 0	Isr: 0
	Topic: mobTopic	Partition: 1	Leader: 1	Replicas: 1	Isr: 1
	Topic: mobTopic	Partition: 2	Leader: 2	Replicas: 2	Isr: 2
	Topic: mobTopic	Partition: 3	Leader: 0	Replicas: 0	Isr: 0
Topic:serverTopic	PartitionCount:4	ReplicationFactor:1	Configs:
	Topic: serverTopic	Partition: 0	Leader: 2	Replicas: 2	Isr: 2
	Topic: serverjsTopic	Partition: 1	Leader: 0	Replicas: 0	Isr: 0
	Topic: serverjsTopic	Partition: 2	Leader: 1	Replicas: 1	Isr: 1
	Topic: serverjsTopic	Partition: 3	Leader: 2	Replicas: 2	Isr: 2
Topic:bugTopic	PartitionCount:4	ReplicationFactor:1	Configs:
	Topic: bugTopic	Partition: 0	Leader: 1	Replicas: 1	Isr: 1
	Topic: bugTopic	Partition: 1	Leader: 2	Replicas: 2	Isr: 2
	Topic: bugTopic	Partition: 2	Leader: 0	Replicas: 0	Isr: 0
	Topic: bugTopic	Partition: 3	Leader: 1	Replicas: 1	Isr: 1
1. 如上面可见,如果指定了--topic就是只显示给定topic的信息,否则显示所有topic的详细信息。 2. 如果指定了under-replicated-partitions,那么就显示那些副本数量不足的分区(ISR size < AR.size) 3. 如果指定了unavailable-partitions,那么就显示那些leader副本已不可用的分区 4. 从zookeeper上获取当前所有可用的broker 5. 遍历每个要describe的topic, 6. 获取这个topic的分区副本分配信息,若该信息不存在说明topic不存在 7. 否则将分配信息按照分区号进行排序 10. 如果没有指定步骤2中的参数也没有指定步骤3中的参数,那么显示分区数信息、副本系数信息以及配置信息 11. 默认情况下还会显示各个分区的信息 12. 从zookeeper中获取每个分区的ISR、Leader、AR信息并显示   二、create topic 创建topic
# kafka-topics.sh --zookeeper localhost:2181 --create --topic mobTopic --replication-factor 1  --partitions 4
  1.  从命令行中获取要创建的topic名称
  2. 解析命令行指定的topic配置(如果存在的话),配置都是x=a的格式
  3. 若指定了replica-assignment参数表明用户想要自己分配分区副本与broker的映射——通常都不这么做,如果不提供该参数Kafka帮你做这件事情
  4. 检查必要的参数是否已指定,包括:zookeeper, replication-factor,partition和topic
  5. 获取/brokers/ids下所有broker并按照broker id进行升序排序
  6. 在broker上分配各个分区的副本映射 (没有指定replica-assignment参数,这也是默认的情况)
  7. 检查topic名字合法性、自定义配置的合法性,并且要保证每个分区都必须有相同的副本数
  8. 若zookeeper上已有对应的路径存在,直接抛出异常表示该topic已经存在
  9. 确保某个分区的多个副本不会被分配到同一个broker
  10. 若提供了自定义的配置,更新zookeeper的/config/topics/[topic]节点的数据
  11. 创建/brokers/topics/[topic]节点,并将分区副本分配映射数据写入该节点
   三、delete topic 删除topic
# ./kafka-topics.sh --zookeeper locahost:2181 --delete --topic mobTopic
  1. 获取待删除的topic,如果没有指定--topic就是删除所有的topic
  2. 对于每个要删除的topic,在zookeeper上的/admin/delete_topics下创建对应的子节点。kafka目前的删除topic逻辑只是在Zookeeper上标记而已,会有专门的线程负责监听该路径下的变更并负责更新zookeeper上其他节点上的数据,但底层的日志文件目前还是需要手动删除。
    四、alert 修改topic的partion
# ./kafka-topics.sh --zookeeper localhost:2181 --alter --topic mobTopic --partitions 10
减少目前kakfa应该是不支持.

0 个评论

要回复文章请先登录注册