【问题标题】:changing kafka retention period during runtime在运行时更改 kafka 保留期
【发布时间】:2015-05-21 15:50:40
【问题描述】:

使用 Kafka 0.8.1.1,如何在运行时更改日志保留时间? documentation 表示该属性为 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)

【问题讨论】:

  • 我有一个愚蠢的问题...... kafka 消息是日志的一部分吗?换句话说,为日志设置保留期意味着为这些消息设置保留期。 kafka 文档对我来说并不完全清楚。
  • kafka 消息存储在日志段中,所以我认为答案是肯定的
  • 请创建一个新问题而不是评论@dtc

标签: apache-kafka retention


【解决方案1】:

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

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

来自 Kafka 0.8.1 文档中的 Topic-level configuration

  • 属性:retention.ms
  • 默认:7 天
  • 服务器默认属性:log.retention.minutes
  • 说明:如果我们使用“删除”保留策略,此配置控制我们在丢弃旧日志段以释放空间之前保留日志的最长时间。这代表了消费者必须在多长时间内读取其数据的 SLA。

所以正确的命令取决于版本。直到0.8.2(尽管文档仍然显示它使用到 0.10.1)使用 kafka-topics.sh --alter 并且在 0.10.2 之后(或者可能从 0.9.0 继续使用)使用 @987654330 @

$ bin/kafka-topics.sh --zookeeper zk.yoursite.com --alter --topic as-access --config retention.ms=86400000
 

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

$ bin/kafka-topics.sh --describe --zookeeper zk.yoursite.com --topic as-access

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

Topic:as-access  PartitionCount:3  ReplicationFactor:3  Configs:retention.ms=86400000

【讨论】:

  • @Jack 保留是对保留数据的最短时间跨度的保证。如果您看到至少保留最低限度的旧日志。清理间隔和保留大小还有其他配置选项可能有助于删除旧日志。
  • 实际上,这种保留可能永远不会奏效。因为每当它尝试应用保留策略时,日志文件可能正在使用或写入器流保持打开状态。这就是为什么它总是失败并且控制台/应用程序日志文件实际上报告了这一点 - 看看这个issues.apache.org/jira/browse/KAFKA-1194
  • 请注意,kafka-topics.sh 现在已弃用。新的方法是:$ bin/kafka-configs.sh --zookeeper zk.yoursite.com --alter --entity-type topics --entity-name mytopic --add-config 'retention.ms=86400000'
  • 完成测试后,您可以使用以下命令将保留时间恢复为默认值:$ bin/kafka-configs.sh --zookeeper <your_ZK_host>:2181 --entity-type topics --entity-name <your_topic> --alter --delete-config retention.ms
  • @user3366706 不,偏移量由一组不同的配置控制。有时,这可能会令人困惑,因为如果您的偏移量仅存储 24 小时但您的数据存储了 7 天,如果您在重新启动应用程序时没有设置新的偏移量 25 小时(应用程序已关闭或其他原因)将从开头或结尾读取,而不是最后一个偏移量。通常建议您保持retention.ms 和offset retention 相同或关闭。
【解决方案2】:

以下是从 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

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`

【讨论】:

  • 如果我有 4 个主题并且我想配置所有四个主题并结合 5 GB 的保留.字节。我该如何配置?
  • @ankit 我认为不可能为一组主题提供单个保留配置。
【解决方案3】:

正确的配置键是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".

【讨论】:

  • 如果我有 4 个主题并且我想配置所有四个主题并结合 5 GB 的保留.字节。我该如何配置?
【解决方案4】:

我在kafka confluent V4.0.0apache kafka V 1.0.0 and 1.0.1中测试并使用了这个命令

/opt/kafka/confluent-4.0.0/bin/kafka-configs --zookeeper XX.XX.XX.XX:2181 --entity-type topics --entity-name test --alter --add-config  retention.ms=55000

test 是主题名称。

我认为它在其他版本中也很有效

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多