Введение
Топик — это больше, чем имя, передаваемое производителю. Его разделы организуют журнал событий, реплики описывают хранимые копии, а настройки хранения определяют, как долго записи могут оставаться в хранилище. Позиция чтения относится к потребителям и представляет собой отдельный аспект работы.
Вы создадите два топика, изучите их метаданные, явно зададите обоим политику хранения, а затем измените только один. Это позволит разобраться в значении индивидуальной настройки топика без ожидания фактического удаления данных и без изменения конфигурации всего брокера.
Подготовленный единственный брокер готов к работе, а имена двух топиков не зависят от предыдущих работ. Достаточно базовых навыков работы в терминале; программировать на Python или Java не требуется. Одна реплика подходит для этой учебной среды с одним брокером. Используйте Terminal.
Создайте два топика и изучите их метаданные
На этом шаге вы сравните два явно заданных числа разделов. Перейдите в рабочий каталог:
cd /home/labex/project
Параметр --bootstrap-server задаёт адрес подготовленного брокера. Создайте orders-retained с двумя разделами и orders-control с одним. Оба топика используют одну реплику, поскольку в этой среде один брокер:
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-retained --partitions 2 --replication-factor 1
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic orders-control --partitions 1 --replication-factor 1
Выведите список топиков и сохраните описание каждого. Оператор оболочки > создаёт локальный файл или заменяет его прежнее содержимое:
kafka-topics.sh --bootstrap-server localhost:9092 --list
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained > /home/labex/project/output/orders-retained-description.txt
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-control > /home/labex/project/output/orders-control-description.txt
cat /home/labex/project/output/orders-retained-description.txt
cat /home/labex/project/output/orders-control-description.txt
Найдите PartitionCount: 2 и 1 соответственно, а также ReplicationFactor: 1 в обоих описаниях. Для каждого раздела указана запись о лидере. Идентификатор брокера-лидера не является числом разделов, а наличие двух разделов не означает наличие двух машин с брокерами.
У топика может быть несколько разделов на одном брокере. Коэффициент репликации описывает копии каждого раздела на разных брокерах, а не независимые копии для каждого потребителя. Далее вы измените срок хранения, не меняя ни одного из этих свойств.
Явно задайте каждому топику срок хранения в один день
На этом шаге вы научитесь отличать унаследованное значение по умолчанию от индивидуальной настройки топика. kafka-configs.sh управляет ресурсами конфигурации. Параметр --entity-type topics выбирает ресурсы топиков, а --entity-name — единственный топик, к которому применяется изменение. Обычно --describe показывает индивидуальные настройки топика; отсутствие такой настройки не означает, что у брокера нет значения по умолчанию.
Просмотрите настройки топика orders-retained перед изменением:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe
retention.ms — это продолжительность в миллисекундах. Один день — это 24 × 60 × 60 × 1000 = 86400000 миллисекунд. Параметры --alter --add-config задают указанную индивидуальную настройку. Независимо установите одну и ту же явную политику для обоих топиков:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=86400000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --alter --add-config retention.ms=86400000
Прочитайте фактические индивидуальные настройки и сохраните результаты:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-one-day-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-one-day-config.txt
cat /home/labex/project/output/retained-one-day-config.txt
cat /home/labex/project/output/control-one-day-config.txt
Найдите retention.ms=86400000 для каждого указанного топика. Клиент также может выводить сведения об источнике конфигурации или конфиденциальности параметров; эти сведения и формат вывода могут различаться.
Срок хранения — это политика хранения брокера, а не указание удалять запись сразу после её чтения потребителем. Возраст записей и очистка сегментов журнала определяют возможность и время удаления; указанная продолжительность не гарантирует исчезновения конкретного сообщения в точный момент. В этой работе проверяется заданная индивидуальная настройка без ожидания очистки.
Измените только один топик и проверьте область действия
На этом шаге вы зададите для orders-retained срок хранения в два дня, оставив для orders-control один день. Предположите, какие метаданные должны измениться: индивидуальная настройка хранения топика orders-retained, при этом число разделов и коэффициент репликации обоих топиков останутся прежними.
Два дня — это 172800000 миллисекунд. Примените это значение только к указанному топику orders-retained:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --alter --add-config retention.ms=172800000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-retained --describe > /home/labex/project/output/retained-final-config.txt
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name orders-control --describe > /home/labex/project/output/control-final-config.txt
cat /home/labex/project/output/retained-final-config.txt
cat /home/labex/project/output/control-final-config.txt
Ожидаются retention.ms=172800000 для orders-retained и retention.ms=86400000 для orders-control. Общий адрес брокера не делает индивидуальную настройку топика глобальной.
Ещё раз просмотрите описание топика orders-retained:
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic orders-retained
В нём по-прежнему должно быть два раздела и одна реплика. Изменение срока хранения не создало новый топик, не добавило разделы, не скопировало позиции потребителей и не прочитало события. Вы проверили и нужное изменение, и то, что соседний топик остался без изменений. Далее ключи свяжут идентификаторы заказов с разделами.
Итоги
Вы создали топики с явно заданными разделами и репликами, изучили их метаданные и установили индивидуальные сроки хранения в миллисекундах. Изменение одного топика не повлияло на другой, что помогло отделить политику хранения топика от позиции потребителя. Далее вы направите связанные события с помощью ключей и изучите смещения внутри отдельных разделов.



