set config retention.ms=3600000 все еще данные не удаляются из Kafka

Я установил retention.ms=3600000 по приведенной ниже команде, но все равно на диске много данных через 1 час. Мой диск был переполнен из-за огромных данных, поступающих в Кафку.

./bin/kafka-topics.sh --zookeeper zookeeper:2181 --alter --topic topic_1 --config retention.ms=3600000

Опишите команду

 ./bin/kafka-topics.sh --zookeeper zookeeper:2181 --describe --topics-with-overrides
    Topic:__consumer_offsets        PartitionCount:50       ReplicationFactor:3     Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
    Topic:topic_1    PartitionCount:3        ReplicationFactor:3     Configs:retention.ms=3600000
    Topic:topic_2    PartitionCount:3        ReplicationFactor:3     Configs:retention.ms=3600000
    Topic:topic_3    PartitionCount:3        ReplicationFactor:3     Configs:retention.ms=3600000,retention.bytes=104857600

Может кто-нибудь дать совет, почему кафка не удаляет данные через 1 час.?

3 ответа

Решение

Исходя из результата команды описать, политика хранения тем установлена ​​на compact который включит сжатие журнала вместо удаления и сохранит последние данные для каждого ключа. Чтобы удалить все данные старше срока хранения, необходимо установить политику хранения delete,

./bin/kafka-topics.sh --zookeeper zookeeper:2181 --alter --topic topic_1 --config cleanup.policy=delete

Как следует из документации, retention.ms контролирует максимальное время, в течение которого kafka будет сохранять журнал, прежде чем отбросит старые сегменты журнала, чтобы освободить место, если мы используем политику хранения "delete". Выглядит как твой cleanup.policy установлен на компакт вместо delete

bin/kafka-configs.sh --zookeeper 2181 --entity-type topics 
--entity-name topic_1  --alter --add-config cleanup.policy=delete

PS: изменение конфигурации темы из скрипта kafka-topics.sh (kafka.admin.TopicCommand) устарело. В дальнейшем используйте для этой функции сценарий kafka-configs.sh (kafka.admin.ConfigCommand).

Проверьте значение log.retention.check.interval.ms,
Это значение влияет на очиститель журнала. Он проверит, имеет ли какой-либо журнал право на удаление с этим интервалом.

Другие вопросы по тегам