我通过以下命令设置了retention.ms = 3600000,但是1小时后磁盘上仍然有很多数据。由于有大量数据流入Kafka,我的磁盘已满。
$mod = 1536079080; //unix time stamp
$moDate = new DateTime('@'. $mod, new DateTimeZone('America/Los_Angeles'));
//Unix change to PST time
$today = date("d/m/Y"); //todays date
echo $mod . "<br>";
$twoWeeks = $mod + (3600*24*14); //NOW + ( 3600 sec = 1 hour * 24 hours/day * 14 days)
$fourWeeks= $mod + (3600*24*28);
$sixWeeks = $mod + (3600*24*42);
$eightWeeks = $mod + (3600*24*56);
// Period 1 between 2 and 4 weeks from now
$p1 = ($mod == $twoWeeks && $mod < $fourWeeks)? true : false;
$res1 = ($p1 ? 'Is a P1' : 'Is not a P1')."<br>";
// Period 2 between 4 and 6 weeks from now
$p2 = ($mod >= $fourWeeks && $mod < $sixWeeks)? true : false;
$res2 = ($p2 ? 'is a P2' : 'Is not a P2')."<br>";
// Period 3 between 6 and 8 weeks from now
$p3 = ($mod >= $sixWeeks && $mod < $eightWeeks)? true : false;
$res3 = ($p3 ? 'Is a P3' : 'Is not a P3')."<br>";
// Period 4 more than 8 weeks in future
$p4 = ($mod >= $eightWeeks) ? true : false;
$res4 = ($p4 ? 'Is a P4' : 'Is not a P4')."<br>";
echo $twoWeeks .'<br>'. $fourWeeks .'<br>'. $sixWeeks .'<br>'. $eightWeeks .'<br><br>' ;
echo $res1 , $res2, $res3, $res4;
描述命令
./bin/kafka-topics.sh --zookeeper zookeeper:2181 --alter --topic topic_1 --config retention.ms=3600000
任何人都可以提出建议,为什么kafka在1小时后不删除数据。
答案 0 :(得分:1)
检查log.retention.check.interval.ms
的值。
此值会影响日志清除器。它将检查在此间隔内是否有资格删除任何日志。
答案 1 :(得分:1)
从describe命令结果中,主题保留策略设置为compact
,这将启用日志压缩而不是删除,并将保留每个键的最新数据。要删除所有早于保留期的数据,您需要将保留策略设置为delete
。
./bin/kafka-topics.sh --zookeeper zookeeper:2181 --alter --topic topic_1 --config cleanup.policy=delete
答案 2 :(得分:1)
正如文档所建议的那样,如果我们使用的是“删除”保留策略,则keep.ms将控制kafka保留日志的最长时间,然后它将丢弃旧的日志段以释放空间。
看来您的cleanup.policy
已设置为紧凑型,而不是delete
bin/kafka-configs.sh --zookeeper 2181 --entity-type topics
--entity-name topic_1 --alter --add-config cleanup.policy=delete
PS:不建议使用kafka-topics.sh脚本(kafka.admin.TopicCommand)更改主题配置。继续,请使用kafka-configs.sh脚本(kafka.admin.ConfigCommand)来实现此功能。