1 问题
如何清空kafka数据?
文中配置项的含义, 请参考: Kafka 0.10, 配置项清单_Lion…的博客-优快云博客
2 对策
2.1 方案一(饥饿法)
默认情况下, kafka旧数据保留期限为一周
所以, 如果一周内不向topic写入数据, 数据会全部清空
缺点:
- 一周太久, 等不起
2.2 方案二(重生法)
设置delete.topic.enable=true
手动删除topic, 然后重建
缺点:
- 需要修改kafka集群配置, 并重启
2.3 方案三(最优法)
设置topic参数retention.ms
, 减少存活时间, 待数据清除后删除参数
相较于前二种方案, 方案三不用重启, 且参数只针对具体topic, 不影响其他topic, 可行
3 执行
针对方案三, 指导性步骤如下
3.1 准备阶段
topic为unitopic, 其中一个分区大小为196 (见日志文件: 00000000000000000242.log)
[root@bd83 kafka]# ll -h /kafka-logs/unitopic-1/
总用量 21M
-rw-r--r-- 1 kafka hadoop 10M 2月 9 17:45 00000000000000000242.index
-rw-r--r-- 1 kafka hadoop 196 2月 24 16:15 00000000000000000242.log
-rw-r--r-- 1 kafka hadoop 10M 2月 9 17:45 00000000000000000242.timeindex
3.2 修改retention.ms
[root@bd83 kafka]# bin/kafka-configs.sh --zookeeper bd83 --alter --entity-type topics --entity-name unitopic --add-config retention.ms=1000
Updated config for entity: topic 'unitopic'.
[root@bd83 kafka]# bin/kafka-configs.sh --zookeeper bd83 --entity-type topics --entity-name unitopic --describe
Configs for topic 'unitopic' are retention.ms=1000
3.3 等待后台清理
retention.ms配置为1000, 表示topic的日志只保留1秒
因为kafka日志清理扫描周期默认为300s, 所以至多需要等待5分钟来观察最终结果
清理时, 会打上delete标记
[root@bd83 kafka]# ll -h /kafka-logs/unitopic-1
总用量 21M
-rw-r--r-- 1 kafka hadoop 0 2月 24 16:30 00000000000000000242.index.deleted
-rw-r--r-- 1 kafka hadoop 196 2月 24 16:15 00000000000000000242.log.deleted
-rw-r--r-- 1 kafka hadoop 12 2月 24 16:30 00000000000000000242.timeindex.deleted
-rw-r--r-- 1 kafka hadoop 10M 2月 24 16:30 00000000000000000244.index
-rw-r--r-- 1 kafka hadoop 0 2月 24 16:30 00000000000000000244.log
-rw-r--r-- 1 kafka hadoop 10M 2月 24 16:30 00000000000000000244.timeindex
清理完成后
[root@bd83 kafka]# ll -h /kafka-logs/unitopic-1
总用量 20M
-rw-r--r-- 1 kafka hadoop 10M 2月 24 16:30 00000000000000000244.index
-rw-r--r-- 1 kafka hadoop 0 2月 24 16:30 00000000000000000244.log
-rw-r--r-- 1 kafka hadoop 10M 2月 24 16:30 00000000000000000244.timeindex