Apache Kafka – популярная распределенная потоковая платформа, обеспечивающая высокую пропускную способность, отказоустойчивость и масштабируемые возможности обмена сообщениями. Одним из важных аспектов управления данными в Kafka является период хранения, который определяет, как долго сообщения сохраняются в теме Kafka. В этой статье мы рассмотрим различные методы настройки и управления периодом хранения в Kafka, а также примеры кода.
Понятие о сроке хранения в Kafka.
Срок хранения в Kafka — это продолжительность, в течение которой сообщения хранятся в теме Kafka, прежде чем их можно будет удалить. Kafka хранит сообщения в сегментах журнала, и каждый сегмент журнала имеет настраиваемый размер и период хранения. Срок хранения можно установить либо в зависимости от времени, либо в зависимости от размера сегмента журнала.
Методы настройки периода хранения:
-
Хранение на основе времени.
Kafka позволяет вам устанавливать период хранения на основе времени. Вы можете указать продолжительность, используя свойство конфигурацииretention.msв конфигурации темы. В следующем примере для темы с именем «my-topic» устанавливается срок хранения в один день (24 часа).Properties topicConfig = new Properties(); topicConfig.put("retention.ms", "86400000"); // 24 hours AdminClient adminClient = AdminClient.create(properties); NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor); newTopic.configs(topicConfig); adminClient.createTopics(Collections.singleton(newTopic)); -
Хранение на основе размера.
Kafka также позволяет вам установить период хранения в зависимости от размера сегмента журнала. Вы можете указать максимальный размер каждого сегмента журнала, используя свойство конфигурацииsegment.bytes. В следующем примере максимальный размер сегмента устанавливается равным 1 ГБ (1073741824 байт) для темы с именем “my-topic”.Properties topicConfig = new Properties(); topicConfig.put("segment.bytes", "1073741824"); // 1 GB AdminClient adminClient = AdminClient.create(properties); NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor); newTopic.configs(topicConfig); adminClient.createTopics(Collections.singleton(newTopic)); -
Компактное хранение.
Kafka предоставляет дополнительную политику хранения, называемую «сжатием журнала», которая сохраняет только самое последнее значение для каждого ключа в теме. Это полезно, если вы хотите сохранить компактное представление данных в теме. Вы можете включить сжатие журнала, установив для свойства конфигурацииcleanup.policyзначение «компакт» в конфигурации темы.Properties topicConfig = new Properties(); topicConfig.put("cleanup.policy", "compact"); AdminClient adminClient = AdminClient.create(properties); NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor); newTopic.configs(topicConfig); adminClient.createTopics(Collections.singleton(newTopic)); -
Неограниченное хранение.
Если вы хотите хранить сообщения в теме на неопределенный срок, вы можете установить период хранения на -1. Это гарантирует, что сообщения никогда не будут удалены в зависимости от времени.Properties topicConfig = new Properties(); topicConfig.put("retention.ms", "-1"); AdminClient adminClient = AdminClient.create(properties); NewTopic newTopic = new NewTopic("my-topic", numPartitions, replicationFactor); newTopic.configs(topicConfig); adminClient.createTopics(Collections.singleton(newTopic));
Настройка периода хранения в Kafka имеет решающее значение для управления хранилищем данных и обеспечения хранения сообщений в течение желаемого срока. В этой статье мы рассмотрели различные методы установки периода хранения в Kafka, включая хранение на основе времени, хранение на основе размера, сжатие журналов и неограниченное хранение. Понимая эти методы и используя предоставленные примеры кода, вы сможете эффективно управлять периодом хранения в своих темах Kafka.