设置配置保留.ms = 3600000仍然没有从卡夫卡中删除数据

时间:2018-11-15 16:55:30

标签: apache apache-kafka retention

我通过以下命令设置了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小时后不删除数据。

3 个答案:

答案 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)来实现此功能。