在运行时更改kafka保留期

Foo*_*o L 51 apache-kafka retention

使用Kafka 0.8.1.1,如何在运行时更改日志保留时间?该文件说,财产是log.retention.hours,而是试图用它来改变kafka-topics.sh返回此错误

$ bin/kafka-topics.sh --zookeeper zk.yoursite.com --alter --topic as-access --config topic.log.retention.hours=24
Error while executing topic command requirement failed: Unknown configuration "topic.log.retention.hours".
java.lang.IllegalArgumentException: requirement failed: Unknown configuration "topic.log.retention.hours".
    at scala.Predef$.require(Predef.scala:145)
    at kafka.log.LogConfig$$anonfun$validateNames$1.apply(LogConfig.scala:138)
    at kafka.log.LogConfig$$anonfun$validateNames$1.apply(LogConfig.scala:137)
    at scala.collection.Iterator$class.foreach(Iterator.scala:631)
    at scala.collection.JavaConversions$JEnumerationWrapper.foreach(JavaConversions.scala:479)
    at kafka.log.LogConfig$.validateNames(LogConfig.scala:137)
    at kafka.log.LogConfig$.validate(LogConfig.scala:145)
    at kafka.admin.TopicCommand$.parseTopicConfigsToBeAdded(TopicCommand.scala:171)
    at kafka.admin.TopicCommand$$anonfun$alterTopic$1.apply(TopicCommand.scala:95)
    at kafka.admin.TopicCommand$$anonfun$alterTopic$1.apply(TopicCommand.scala:93)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
    at kafka.admin.TopicCommand$.alterTopic(TopicCommand.scala:93)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:52)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)
Run Code Online (Sandbox Code Playgroud)

Hee*_*jin 106

log.retention.hours是代理的属性,在创建主题时用作默认值.更改当前正在运行的主题的配置时kafka-topics.sh,应指定主题级属性.

日志保留时间的主题级属性是retention.ms.

从Kafka 0.8.1文档中的主题级配置:

  • 属性:retention.ms
  • 默认值:7天
  • 服务器默认属性:log.retention.minutes
  • 描述:如果我们使用"删除"保留策略,此配置将控制我们在保留旧日志段以释放空间之前保留日志的最长时间.这表示消费者必须多快阅读其数据的SLA.

所以正确的命令是

$ bin/kafka-topics.sh --zookeeper zk.yoursite.com --alter --topic as-access --config retention.ms=86400000
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令检查配置是否正确应用.

$ bin/kafka-topics.sh --describe --zookeeper zk.yoursite.com --topic as-access
Run Code Online (Sandbox Code Playgroud)

然后你会看到类似下面的东西.

Topic:as-access  PartitionCount:3  ReplicationFactor:3  Configs:retention.ms=86400000
Run Code Online (Sandbox Code Playgroud)

  • 请注意,现在不推荐使用`kafka-topics.sh`.新方法是:`$ bin/kafka-configs.sh --zookeeper zk.yoursite.com --alter --entity-type topics --entity-name mytopic --add-config'retention.ms = 86400000'` (21认同)
  • 实际上,这种保留可能永远不会奏效。因为无论何时尝试应用保留策略,日志文件都可能正在使用中,或者写入器流保持打开状态。这就是为什么它总是失败并且控制台/应用程序日志文件实际上报告了这一点 - 检查一下 https://issues.apache.org/jira/browse/KAFKA-1194 (2认同)
  • 测试完成后,可以使用以下命令将保留时间恢复为默认值:$ bin / kafka-configs.sh --zookeeper <your_ZK_host>:2181 --entity-type主题--entity-name < your_topic> --alter --delete-configtention.ms` (2认同)

Vik*_*koo 48

以下是从Kafka 0.10.2.0开始更改主题配置的正确方法:

bin/kafka-configs.sh --zookeeper <zk_host> --alter --entity-type topics --entity-name test_topic --add-config retention.ms=86400000
Run Code Online (Sandbox Code Playgroud)

已弃用主题配置更改操作bin/kafka-topics.sh.

WARNING: Altering topic configuration from this script has been deprecated and may be removed in future releases.
     Going forward, please use kafka-configs.sh for this functionality`
Run Code Online (Sandbox Code Playgroud)


Foo*_*o L 7

正确的配置密钥是 retention.ms

$ bin/kafka-topics.sh --zookeeper zk.prod.yoursite.com --alter --topic as-access --config retention.ms=86400000
Updated config for topic "my-topic".
Run Code Online (Sandbox Code Playgroud)