当前位置: 首页 > 知识库问答 >
问题:

即使在保留时间/大小之后,数据仍然保留在Kafka主题中

牧熙云
2023-03-14

我们将日志保留时间设置为 1 小时,如下所示(以前设置为 72H)

使用以下Kafka命令行工具,我们将kafka retention.ms设置为< code>1H。我们的目标是清除topic - test_topic中比1H旧的数据,因此我们使用了以下命令:

kafka-configs.sh --alter \
  --zookeeper localhost:2181  \
  --entity-type topics \
  --entity-name topic_test \
  --add-config retention.ms=3600000

此外

kafka-topics.sh --zookeeper localhost:2181 --alter \
  --topic topic_test \
  --config retention.ms=3600000

两个命令都运行无误。

但问题是关于Kafka的数据,它比1H更老,仍然存在!

实际上,没有从主题topic_test分区中删除任何数据。我们有HDP Kafka集群版本1.0x和ambari

我们不明白为什么主题-topic_test上的数据仍然存在?甚至在我们按照已经描述的方式运行两个cli之后也没有减少。

以下kafka cli有什么问题?

kafka-configs.sh --alter --zookeeper localhost:2181  --entity-type topics  --entity-name topic_test --add-config retention.ms=3600000

kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic_test --config retention.ms=3600000

从Kafka<code>服务器。log我们可以看到以下内容

2020-07-28 14:47:27,394] INFO Processing override for entityPath: topics/topic_test with config: Map(retention.bytes -> 2165441552, retention.ms -> 3600000) (kafka.server.DynamicConfigManager)
[2020-07-28 14:47:27,397] WARN retention.ms for topic topic_test is set to 3600000. It is smaller than message.timestamp.difference.max.ms's value 9223372036854775807. This may result in frequent log rolling. (kafka.server.TopicConfigHandler)

参考资料 - https://ronnieroller.com/kafka/cheat-sheet

共有1个答案

狄德泽
2023-03-14

日志清理程序将仅在非活动(有时也称为“旧”或“干净”)段上工作。只要所有数据都适合活动(“脏”、“不干净”)段,其中其大小由段.bytes 大小限制定义,就不会进行清理。

配置< code>cleanup.policy描述为:

“删除”和/或“压缩”的字符串。此字符串指定用于旧日志段的保留策略。默认策略(“删除”)将在达到旧数据段的保留时间或大小限制时丢弃旧数据段。“压缩”设置将对主题启用日志压缩。

此外,segment.bytes是:

此配置html" target="_blank">控制日志的段文件大小。保留和清理始终是一次完成一个文件,因此较大的段大小意味着更少的文件,但对保留的粒度控制较少。

配置 segment.ms 也可用于引导删除:

此配置控制一段时间,之后即使段文件未满,Kafka也会强制日志滚动,以确保保留可以删除或压缩旧数据。

因为它默认为一周,所以您可能想要减少它以满足您的需要。

因此,如果要将主题的保留期设置为例如一小时,则可以设置:

cleanup.policy=delete
retention.ms=3600000
segment.ms=3600000
file.delete.delay.ms=1 (The time to wait before deleting a file from the filesystem)
segment.bytes=1024

注意:我指的不是retention.bytessegment.bytes是一个非常不同的东西,如上所述。此外,请注意log.retention.hours是一个集群范围的配置。所以,如果您计划对不同的主题有不同的保留时间,这将解决它。

 类似资料:
  • 问题内容: 我尝试使用Python的ConfigParser模块保存设置。对于我的应用程序,重要的是要在我的部分中保留每个名称的大小写。文档提到将str()传递给ConfigParser.optionxform()可以完成此操作,但对我而言不起作用。名称均为小写。我想念什么吗? 我得到的Python伪代码: 问题答案: 该文档令人困惑。他们的意思是: 即覆盖optionxform,而不是调用它;重

  • 我在学硒。我使用的是Python 2.7。幻影JS-2.1.1。 背景-脚本试图将数据输入控件。该脚本能够捕获控件。但是,较早执行的数据将被保留。 截图 null

  • 在创建期间配置所有主题的保留策略 正在尝试配置租用。ms使用spring,因为我得到一个错误: 原因:java.util.concurrent。ExecutionException:org.apache.kafka.common.errors。PolicyViolationException:保留无效。ms指定。允许的范围是[3600000..2592000000],根据我读取的值,新值是-1(无

  • 我想在搜索后没有找到结果的时候展示吐司,我做了一个简单的吐司,但是吐司留了很长时间,我想在短时间后它就消失了 这是代码

  • 我在应用程序中使用SQLite数据库。直到最近一切都很顺利。现在,每当我从Studio在我的Android设备上进行新的构建时,一切都会重置到几天前的状态。相同的项目是存在的,并且我对它们所做的所有更改都丢失了。