gpt4 book ai didi

apache-kafka - Kafka - 保留期参数

转载 作者:行者123 更新时间:2023-12-01 21:59:42 24 4
gpt4 key购买 nike

试图了解 Apache Kafka 保留期背后的逻辑。请帮助我了解以下情况的情况。

  1. 如果将保留期设置为 0,会发生什么情况?是否会删除所有记录?
  2. 如果我们删除保留参数本身,它会取默认值吗?

最佳答案

  1. Kafka 不允许您将保留期设置为零,以小时为单位。它必须至少为 1。如果将其设置为零,您将收到以下错误消息,并且代理不会启动。

java.lang.IllegalArgumentException: requirement failed:log.retention.ms must be unlimited (-1) or, equal or greater than 1

您仍然可以在使用参数 log.retention.minuteslog.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。您可以在 this 中找到保留如何依赖于数据摄取和时间的示例。线程。

  • 为了测试这一点,我们可以尝试一个小实验。让我们启动 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
  • 现在,如果我们使用 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 
  • 现在,几乎立即我们就会看到旧记录正在从 Kafka 中删除。

  1. 是的。正如 server.properties 中的每个 Kafka 参数所发生的那样,如果我们删除/注释掉一个属性,该属性的默认值就会生效。我认为默认保留期为 1 周。<

关于apache-kafka - Kafka - 保留期参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com