Перейти к содержанию

Практикум: клиенты Kafka, commit и повторная доставка

Запускаемые примеры из статьи. Нужен работающий Docker. Выполните команду из docs/blog/lab/2026-09-07-aiokafka-checklist в клоне репозитория:

uv run --no-project --python 3.13 --with-requirements requirements.txt checklist_lab.py

В 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 создания топиков можно запустить так:

uv run --no-project --python 3.13 --with-requirements requirements.txt topic_probe.py

Каждая строка PASS появляется после успешных проверок. Стенд с одним брокером не проверяет надёжность репликации или перераспределение партиций во время работы. Продолжение: создание топиков и остановка consumer.

Исходный код практикума на GitHub.