Остальной стенд: Kafka, Airflow 3, Superset, мониторинг — make up и сквозной smoke #13
Notifications
Due Date
No due date set.
Depends on
#12 Кластер ClickHouse: 2 ноды + keeper в compose, smoke ON CLUSTER
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#13
Reference in New Issue
Block a user
Родитель
#3 — Этап 1: каркас стенда, кластерный compose.
Что сделать
Добавить рядом с кластером остальной стенд: Kafka, Airflow, Superset, Prometheus и Grafana.
make upподнимает всё одной командой,make downгасит. Airflow подключается к ноде 1 ClickHouse, Superset — к ноде 2 (это осознанная ловушка правильных ошибок: забытый ON CLUSTER проявится потом в дашборде сам). Мониторинг видит цели: обе ноды ClickHouse и keeper.Версия Airflow — третья. Её нужно зафиксировать явно, потому что API третьей версии отличается от второй (Datasets переименованы в Assets), и все DAG'и стенда пишутся уже под неё.
Критерии приёмки
latest) и видна в интерфейсе.make upподнимает весь стенд; все контейнеры доходят до здорового состояния.make downи сброс стенда описаны в документации и работают..env.example; секретов в репозитории нет.Границы
etl_pipelineи прочие) — этап 5. Здесь только пример-DAG, доказывающий, что Airflow работает.Сначала прочитать
docs/specs/2026-07-30-stand-v2-realism.md: раздел 6 (роли нод и бюджет памяти: полный стенд в покое около 3,4 ГБ, кластер добавляет 0,6–0,8 ГБ) и раздел 9 (объём: инфраструктура ~10–12 файлов, мониторинг 2–4 конфига).AGENTS.md. Перед выбором образа и написанием примера-DAG уточнить API Airflow 3 через MCP Context7.Проверка
make up, затем сквозная smoke-команда.make downи повторныйmake up— стенд поднимается снова.Блокируется
#12 — конфиги кластера и макросы должны быть на месте: Superset и мониторинг некуда направлять, пока нет двух нод и keeper.
Наблюдения ревьюера #12, которые чинить там не стали: они попадают в границы этого тикета.
Healthcheck нод проверяет живость, а не готовность.
SELECT 1остаётся зелёным при недоступном keeper — проверено: обе ноды числилисьhealthyещё 25 секунд после остановки keeper. Сервисы этого этапа, которые повесятdepends_on: service_healthyнаclickhouse-01, унаследуют сигнал «процесс жив», а не «кластер работоспособен».CLICKHOUSE_SKIP_USER_SETUP=1проглотит будущий пароль молча. Переменная стоит первой ветвью в цепочкеifштатного entrypoint образа, поэтому добавленные позжеCLICKHOUSE_USER/CLICKHOUSE_PASSWORDпросто не будут применены — без ошибки. Сама переменная не карго-культ: без неё entrypoint пишетusers.d/default-user.xml, ограничивающийdefaultадресами 127.0.0.1/::1, и межнодовые запросы через Distributed ломаются.mem_limit: 1gна ноду — это потолок для всего, что придёт дальше. В покое кластер занимает 0,49 ГБ (222 + 216 + 51 МБ), запас есть, но под этим лимитом будут жить Kafka Engine, матвью и запросы Superset.Реализация готова, ветка
feat/13-stand-full.Что стоит на стенде. Рядом с кластером ClickHouse подняты Kafka (KRaft, без ZooKeeper), Postgres для метаданных Airflow и Superset, Airflow 3.3 четырьмя сервисами (api-server, планировщик, обработчик DAG, разовая инициализация), Superset 6.1 и мониторинг — Prometheus и Grafana.
make upподнимает всё одной командой. Ловушка правильных ошибок сохранена намеренно: подключение Airflow ведёт на ноду 1, подключение Superset — на ноду 2, поэтому забытыйON CLUSTERвиден в дашборде сам.Проверка.
make smoke— сквозная проверка стенда, 24 пункта. Это не «контейнер запущен»: временный топик в Kafka создаётся, находится и удаляется; Prometheus видит ровно три цели ClickHouse со значениемup=1; Airflow пускает по учётным данным и реально запускает пример DAG через API; Superset проверяет своимtest-dbподключение, вынутое из собственных метаданных; расход памяти сверяется с порогом 3,4 ГБ.Прогон приёмки на чистых томах:
make clean→cp .env.example .env→make up(1 мин 51 с) →make smoke— 24 пройдено, 0 ошибок, 2171 MiB. Также зеленыmake config-test(статические ворота, 3/0 и 5/0),make smoke-cluster(8/8) иmake smoke-guards(3/0 и 3/0) — стражи специально ломают стенд и проверяют, что отчёт краснеет, а после восстановления снова зеленеет.Конвейер. Постановка прошла два слепых ревью (26 замечаний, все приняты), реализация — саморевью, два слепых ревью кода с разными линзами и триаж: 16 исправлено, 1 отклонено обоснованно. Узкие перепроверки закрыли все находки обеих линий.
Отдельно поймано на приёмке, уже исправлено: восстановленные статические ворота были написаны на
ripgrep, которого на машине нет, и при этом печатали «ЗЕЛЁНО» поверх упавшей проверки — код возврата подстановки процесса не ловился, и проверка синтаксиса Bash молча не проверяла ничего.Решения записаны в
docs/adr/0001-stand-services.md, состав стенда и порядок работы — вREADME.md.