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: 11. 如上面可见,如果指定了--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
- 从命令行中获取要创建的topic名称
- 解析命令行指定的topic配置(如果存在的话),配置都是x=a的格式
- 若指定了replica-assignment参数表明用户想要自己分配分区副本与broker的映射——通常都不这么做,如果不提供该参数Kafka帮你做这件事情
- 检查必要的参数是否已指定,包括:zookeeper, replication-factor,partition和topic
- 获取/brokers/ids下所有broker并按照broker id进行升序排序
- 在broker上分配各个分区的副本映射 (没有指定replica-assignment参数,这也是默认的情况)
- 检查topic名字合法性、自定义配置的合法性,并且要保证每个分区都必须有相同的副本数
- 若zookeeper上已有对应的路径存在,直接抛出异常表示该topic已经存在
- 确保某个分区的多个副本不会被分配到同一个broker
- 若提供了自定义的配置,更新zookeeper的/config/topics/[topic]节点的数据
- 创建/brokers/topics/[topic]节点,并将分区副本分配映射数据写入该节点
# ./kafka-topics.sh --zookeeper locahost:2181 --delete --topic mobTopic
- 获取待删除的topic,如果没有指定--topic就是删除所有的topic
- 对于每个要删除的topic,在zookeeper上的/admin/delete_topics下创建对应的子节点。kafka目前的删除topic逻辑只是在Zookeeper上标记而已,会有专门的线程负责监听该路径下的变更并负责更新zookeeper上其他节点上的数据,但底层的日志文件目前还是需要手动删除。
# ./kafka-topics.sh --zookeeper localhost:2181 --alter --topic mobTopic --partitions 10减少目前kakfa应该是不支持.