Изменение срока хранения кафки во время выполнения

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

6 ответов

Решение

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

Вы можете проверить правильность применения конфигурации с помощью следующей команды.

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

Тогда вы увидите что-то вроде ниже.

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

Ниже приведен правильный способ изменить конфигурацию темы, начиная с 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`

Правильный ключ конфигурации 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".

Я проверил и использовал эту команду в kafka confluent V4.0.0 а также apache 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 это типичное имя.

Я думаю, что это работает хорошо и в других версиях

Ответы с опцией Zookeeper и kafka-topics.sh устарели. Текущий способ сделать это:

      ./kafka-configs.sh --bootstrap-server <server:port> --alter --entity-type topics --entity-name <my-topic> --add-config retention.ms=86400000

--zookeeper устарел для kafka-configs.sh, вместо этого используйте:

      kafka-configs.sh --bootstrap-server <yourserver:9092> --alter --topic <your-topic> --add-config <config-name=value>
Другие вопросы по тегам