试图了解 Apache Kafka 中保留期背后的逻辑。请帮助我了解以下场景的情况。
java.lang.IllegalArgumentException:要求失败:log.retention.ms 必须是无限制的 (-1) 或等于或大于 1
您仍然可以在使用参数时将其设置为零log.retention.minutes
或log.retention.ms
现在,让我们来到数据删除点。在这种情况下,即使在设置的保留时间(比如 1 小时或 1 分钟)到期后,旧数据也不太可能被删除,因为server.properties
调用log.segment.bytes
中的另一个变量在那里起着重要作用。的值log.segment.bytes
默认设置为 1GB。Kafka 只对关闭的段执行删除操作。所以,一旦一个日志段达到 1GB,它就会被关闭,只有在此之后保留log.segment.bytes
才会生效。您计划在短时间内保留的数据。例如,如果您的保留期为 10 分钟,并且您每分钟获得大约 1 MB 的数据,那么您可以设置log.segment.bytes=10485760
哪个是1024 x 1024 x 10
. 您可以在此线程中找到有关保留如何依赖于数据摄取和时间的示例。
为了测试这一点,我们可以尝试一个小实验。让我们启动 Zookeeper 和 Kafka,创建一个名为的主题test
并将其保留期更改为零。
1) nohup ./zookeeper-server-start.sh ../config/zookeeper.properties &
2) nohup ./kafka-server-start.sh ../config/server.properties &
3) ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
4) ./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name test --alter --add-config log.retention.ms=0
Run Code Online (Sandbox Code Playgroud)
现在如果我们使用 Kafka-console-producer 插入足够多的记录,即使在 2-3 分钟后,我们也会看到记录没有被删除。但是现在,让我们将 更改log.segment.bytes
为 100 字节。
5) ./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name test --alter --add-config segment.bytes=100
Run Code Online (Sandbox Code Playgroud)
现在,几乎立即我们就会看到旧记录正在从 Kafka 中删除。
server.properties
,如果我们删除/注释掉一个属性,该属性的默认值就会生效。我认为,默认保留期是 1 周。 归档时间: |
|
查看次数: |
4805 次 |
最近记录: |