原因

有研发同事反馈,kafka集群无法消费了,经查看日志,发现数据磁盘占用100%,修改kafka参数(后续详细说明),删除kafka日志,仍无法启动,经与研发同事商量可以删除topic。

过程

1.与业务同事确定kafka数据保存时间,确定每个分片保存大小,涉及参数:

参数名参数含义默认值此处配置
log.retention.hours日志保存的时间,可以选择hours,minutes和ms168(7day)12
log.retention.bytes删除前日志文件允许保存的最大值-15368709120

参数说明:

log.retention.bytes,从网上查看和问同事都说是每台机器限制日志的大小,但是根据反复配置发现,log.retention.bytes可能和每个分片的大小有关,磁盘大小是558G ,根据0.8原则,我配置log.retention.bytes=429496729600(400G)log.retention.hours=12 ,经过一天还是满了,后来把log.retention.bytes改成了5368709120(5G)就莫名的好了,如有不同见解,欢迎指正。

相关参数配置

log.retention.hours=12(修改)

log.retention.bytes=5368709120(新增)

2.此步骤很重要

如果要删除的topic正在被消费或者生产,那么相关程序需要暂停,否则topic无法被删除,而且使用kafka --delete的时候也不报错,会让人误以为被删除了,但是等删除完,查看list的时候,发现topic还在,涉及参数

参数名参数含义默认值此处配置
auto.create.topics.enable是否允许自动创建topictruefalse
delete.topic.enable是否物理删除topicfalsetrue

参数说明:

只有这两个参数一起配置时,才能达到预想中删除topic的目的。

相关参数配置:

auto.create.topics.enable=false(新增)

delete.topic.enable=true(新增)

3.停止kafka,删除topic的相关数据目录,涉及命令:

sh bin/kafka-server-stop.sh(停止kafka进程)

rm -rf kafka-logs/topic*(删除topic的数据目录)

4..删除kafka使用的zookeeper中该topic的信息,涉及命令:

sh bin/zkCli.sh -server zookeeperip:port(通过客户端进入zookeeper)

ls /brokers/topics/topic(确定要删除的topic的目录)

rmr /brokers/topics/topic(删除的topic的目录)

ps:若删除所有topic,直接删除zookeeper配置data中version-2的目录,重启zookeeper即可。

5.重新启动kafka,涉及命令:

nohup bin/kafka-server-start.sh config/server.properties &(启动kafka)

6.完成之后,重建topic即可。

沉淀

1.部署kafka之前确认每一台的数据盘挂在情况;

2.相关参数部署之前确认好

3.若数据盘满了,可以在确定topic包含2个及以上副本的前提下,删除每台服务器上的不同的副本,优先保证kafka启动出发删除机制。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐