Практикум: клиенты Kafka, commit и повторная доставка¶
Запускаемые примеры из статьи.
Нужен работающий Docker. Выполните команду из
docs/blog/lab/2026-09-07-aiokafka-checklist в клоне репозитория:
В requirements.txt закреплены aiokafka-foundation-kit 0.1.3, aiokafka 0.14.0
и testcontainers 4.15.0. Скрипт создаёт и удаляет собственный контейнер
confluentinc/cp-kafka:7.6.0 в режиме KRaft. Автоматическое создание топиков
на стороне брокера отключено.
kafka_flow.py содержит семь фрагментов кода из статьи, от producer до управления
остановкой, а также функцию read_lag(), которой практикум измеряет отставание.
Подключение к servicewright, через которое запускается управление остановкой, находится
в практикуме про остановку.
lab_support.py запускает общий стенд и читает сообщения с ограничением времени.
Проверяются следующие результаты:
- опубликованный
ensure_topics_async()создаёт топик с тремя партициями без подмены функций; - словари приходят как JSON, ключи остаются байтами;
- после чтения пяти записей lag текущей позиции равен нулю, а подтверждённой равен пяти;
- ошибка обработчика после двух изменений оставляет пачку неподтверждённой, все пять записей приходят снова;
- учебная витрина пропускает повторы и старые версии статуса;
- после обработки offset 0–4 и ручного commit 5 следующий экземпляр начинает с 5;
- автоподтверждение может сохранить 5 после получения пяти записей и обработки только двух;
- проверка подключения библиотеки возвращает true для работающего брокера.
Витрина в памяти нужна, чтобы наблюдать результат; постоянное хранилище приложения она не заменяет. Для проверки повтора создаются новые consumer той же группы. Сценарий автоподтверждения ждёт настоящий периодический commit при открытом клиенте; обычное закрытие не выдаётся за падение процесса. Проверка подключения не проверяет права на топик или работу обработчика.
Отдельную проверку публичного API создания топиков можно запустить так:
Каждая строка PASS появляется после успешных проверок. Стенд с одним брокером
не проверяет надёжность репликации или перераспределение партиций во время работы.
Продолжение: создание топиков
и остановка consumer.