1. ホーム
  2. apache-kafka

ランタイム中にkafkaの保持期間を変更する

2023-08-23 10:40:06

質問

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)

どのように解決するのですか?

log.retention.hours はブローカーのプロパティで、トピック作成時にデフォルト値として使用されます。現在動作中のトピックの設定を変更する場合は kafka-topics.sh を使用して現在実行中のトピックの設定を変更する場合は、トピックレベルのプロパティを指定する必要があります。

ログの保持時間に関するトピックレベルのプロパティは retention.ms .

から トピックレベルの設定 をKafka 0.8.1ドキュメントに追加しました。

  • プロパティ : リテンション.ms
  • デフォルト 7日間
  • サーバデフォルトプロパティ : log.retention.minutes
  • 説明 : この設定は、"delete"保持ポリシーを使用している場合、スペースを空けるために古いログセグメントを破棄する前に、ログを保持する最大時間を制御します。これは、消費者がどれだけ早くデータを読み込まなければならないかについての SLA を表します。

したがって、正しいコマンドは はバージョンに依存し . 最大で 0.8.2 (ただし、ドキュメントには 0.10.1 までの使用が示されています) では kafka-topics.sh --alter の後に 0.10.2 (から(あるいは 0.9.0 以降)は kafka-configs.sh --alter

$ 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