2015-03-18 10 views
28

Con Kafka 0.8.1.1, come posso modificare il tempo di conservazione del registro mentre è in esecuzione? Il documentation dice la proprietà è , ma cercando di cambiarlo usando kafka-topics.sh restituisce questo erroremodifica del periodo di conservazione kafka durante il runtime

$ 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) 

risposta

62

è una struttura di un broker che viene utilizzato come valore predefinito quando viene creato un argomento. Quando si modificano le configurazioni dell'argomento attualmente in esecuzione utilizzando kafka-topics.sh, è necessario specificare una proprietà a livello di argomento.

Una proprietà a livello di argomento per il periodo di memorizzazione del registro è retention.ms.

Da Topic-level configuration in Kafka 0.8.1 documentazione:

  • Proprietà: retention.ms
  • predefinito: 7 giorni
  • server predefinito Proprietà: log.retention.minutes
  • Descrizione: questa configurazione controlla la m per un tempo massimo conserveremo un log prima di eliminare i vecchi segmenti di log per liberare spazio se stiamo usando il criterio di conservazione "delete". Questo rappresenta un SLA su quanto tempo i consumatori devono leggere i loro dati.

Così il comando corretto è

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

È possibile controllare se la configurazione viene applicata correttamente con il seguente comando.

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

Quindi vedrete qualcosa come sotto.

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

Ho eseguito il comando precedente, ma non funziona! Posso ancora vedere i vecchi log. Qualche idea per favore. – Jack

+1

@ La ritenzione del jack è una garanzia sull'intervallo di tempo minimo per conservare i dati. Se vedi registri meno recenti che mantengono almeno il minimo. Esistono altre opzioni di configurazione per un intervallo di pulizia e dimensioni di conservazione che potrebbero aiutare a eliminare i registri meno recenti. – dlamblin

+0

In realtà, questa conservazione potrebbe non funzionare mai. Perché ogni volta che tenta di applicare il criterio di conservazione i file di registro potrebbero essere in uso o lo stream del writer verrà tenuto aperto. Questo è il motivo per cui fallisce sempre e il file di console/app segnala questo in realtà - controlla questo https://issues.apache.org/jira/browse/KAFKA-1194 – ha9u63ar

4

La chiave di configurazione corretta è 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". 
16

Il seguente è il modo giusto di cambiare argomento config come di 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 

topic config altera le operazioni sono state deprecate per 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`