Kafka-保留期限参数

时间:2019-01-04 21:53:51

标签: apache-kafka

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

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

1 个答案:

答案 0 :(得分:1)

  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个字节。
      1. ./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name testing --alter --add-config segment.bytes=100
    • 现在,几乎立即,我们将看到旧记录已从Kafka中删除。
  2. 是的。 server.properties中的每个Kafka参数都会发生这种情况,如果我们删除/注释一个属性,该属性的默认值就会生效。我认为默认保留期为1周。

相关问题