创建Kafka的Tiopic
kafka-topics.bat --create -zookeeper localhost:2182 --replication-factor 2 --partitions 3 --topic testMcdull222
--create 创建主题
--topic 主题名称
-zookeeper zookeeper集群地址
--replication-factor 每个分区副本因子个数即每个分区有多少副本
--partitions 主题partition数量
--replica-assignment 不能同时使用--partitions --replication-factor参数。指定partition的AR列表,未指定AR列表则会根据负载均衡算法将partition的replica均衡的分布在Kafka集群中。--replica-assignment 1:3,2:1,3:2,逗号区分不同的partition,冒号区别相同partition中的replica,partition-0的AR=[1,3],partition-1的AR=[2,1],partition-2的AR=[3,2]。testMcdull222AR列表计算出来时--replica-assignment 2:3,1:3,1:2 。
第一个broker
第二个broker
第三个broker
--replica-assignment 参数一般不由用户指定,由Kafka默认分配算法保证,有两个原则:
(1)使Topic的所有Partition Replica能够均匀地分配至各个Kafka Broker(负载均衡);
(2)Partition 内的replica能够均匀地分配在不同Kafka Broker。如果Partition的第一个Replica分配至某一个Kafka Broker,那么这个Partition的其它Replica则需要分配至其它的Kafka Brokers,即Partition Replica分配至不同的Broker;
1、从Broker随机位置开始按照轮询方式选择每个Partition的第一个replica
2、不同Partition剩余replica按照一定的偏移量紧跟着各自的第一个replica
指定--replica-assignment参数相当于指定了分区数、副本数。
kafka-topics.bat --create -zookeeper localhost:2182 --topic testMcdull222666 --replica-assignment 1:3,2:1,3:2
第一个broker
第二个broker
第三个broker
查看Kafka中Topic
kafka-topics.bat --zookeeper localhost:2183 --list
展示Topic详细信息
kafka-topics.bat --zookeeper localhost:2183 --describe --topic testMcdull
删除Topic
kafka-topics.bat --zookeeper localhost:2183 --delete --topic testMcdull222333
如果kafaka启动时加载的配置文件中server.properties没有配置"delete.topic.enable=true",那么此时的删除并不是真正的删除,而是把topic标记为删除:marked for deletion。或者直接从Zookeeper中删除。
彻底删除topic方式
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
2、如果配置了delete.topic.enable=true直接通过命令删除,如果命令删除不掉,直接通过zookeeper-client 删除掉broker下的topic即可。
从Zookeeper中删除
(1)登录zookeeper客户端:命令:./bin/zookeeper-client
(2)找到topic所在的目录:ls /brokers/topics
(3)找到要删除的topic,执行命令:rmr /brokers/topics/topicName即可,此时topic被彻底删除。