kafka 0.8.1.1以及之前版本都无法使用类似一条命令就彻底删除topic,此命令不过只是在zookeeper注销信息而已,但是实际的日志内容还是保存在kafka log中,如果想彻底删除topic,过程如下:
1、从zookeerer删除信息
./bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper 10.0.1.10:2181,10.0.1.11:2181,10.0.1.12:2181 --topic test
成功后返回信息:deletion succeeded!
2、利用JPS命令查看kafka和zookeeper进程,kill掉QuorumPeerMain和Kafka进程
3、从kafka的log.dirs目录删除文件,可以看到多个子目录名字如test-0,test-1…test-n(就是你topic的partition个数)
进入到kafka的log.dirs目录,执行
rm –fr test-0……test-n
4、修改日志目录的recovery-point-offset-checkpoint和replication-offset-checkpoint文件(要小心删除,否则待会kafka不能正常启动起来)
replication-offset-checkpoint格式如下:
0
4(partition总数)
test 0 0
test 3 0
hehe 0 0
hehe 1 0
修改后如下:
0
2(partition总数)
hehe 0 0
hehe 1 0
把含有test行全部去掉,并且把partition总数修改为减去test的partition的剩余数目,同理recovery-point-offset-checkpoint也是这样修改。
完成后就可以正常启动zookeeper和kafka。
从kafka 0.8.2.1开始可以直接删除topic,步骤如下:
kafka 0.8.1.1之前版本,kafka-topics.sh命令连--delete Delete a topic参数都没有,如下:
可使用如下命令 ./kafka-topics.sh --help查看
Command must include exactly one action: –list, –describe, –create or –alter
Option Description
—— ———–
–alter Alter the configuration for the topic.
–config
在之后的版本增加了这个delete项
Option Description
—— ———–
–alter Alter the number of partitions,
replica assignment, and/or
configuration for the topic.
–config
当前测试版本0.10.0.0
删除过程:
1、在kafka配置文件server.properties中添加删除参数
delete.topic.enable=true
2、利用命令删除需要删除的topic
bin/kafka-topics.sh --zookeeper zk_host:port/chroot --delete --topic my_topic_name
版本不一样,删除方法不一样,最好是升级到新版较稳定的比较好