Перейти к содержанию
Learning Platform
Начальный
15 минут
Docker Lab Environment Kafka PostgreSQL

Требуемые знания:

  • module-1/02-debezium-architecture

Настройка лабораторного окружения

В этом уроке мы запустим полноценную среду для работы с Debezium: PostgreSQL с logical replication, Kafka в KRaft режиме, Debezium Connect и инструменты мониторинга.

Требования

Перед началом убедитесь, что у вас установлены необходимые инструменты.

Docker Desktop

Проверьте версию Docker:

docker --version
# Docker version 24.0.0 или выше

Ресурсы

Откройте настройки Docker Desktop и убедитесь, что выделено:

  • RAM: минимум 8 GB (рекомендуется 10 GB)
  • CPU: минимум 4 ядра

Свободные порты

Убедитесь, что следующие порты не заняты:

ПортСервисПроверка
5433PostgreSQLlsof -i :5433
9092Kafkalsof -i :9092
8083Kafka Connectlsof -i :8083
8888JupyterLablsof -i :8888
3000Grafanalsof -i :3000

Важно: PostgreSQL использует порт 5433, а не стандартный 5432. Это сделано намеренно, так как порт 5432 часто занят локальной установкой PostgreSQL.

Запуск окружения

Шаг 1: Перейдите в директорию labs

cd labs/

Шаг 2: Запустите все сервисы

docker compose up -d

Эта команда загрузит образы (при первом запуске) и запустит 7 сервисов в фоновом режиме.

Шаг 3: Дождитесь полной инициализации

Первый запуск занимает 2-3 минуты. Проверьте статус:

docker compose ps

Ожидаемый результат — все сервисы в статусе healthy или running:

NAME              STATUS
connect           healthy
grafana           running
jupyter           running
kafka             healthy
postgres          healthy
prometheus        running
schema-registry   healthy

Проверка сервисов

После запуска убедитесь, что каждый компонент работает корректно.

Таблица проверки

СервисКоманда/URLОжидаемый результат
PostgreSQLdocker compose exec postgres psql -U postgres -c "SHOW wal_level;"logical
Kafkadocker compose exec kafka kafka-topics --bootstrap-server localhost:9092 --listПустой список или системные топики
Connectcurl http://localhost:8083/JSON с версией
Schema Registrycurl http://localhost:8081/subjects[]
JupyterLabhttp://localhost:8888Интерфейс JupyterLab
Grafanahttp://localhost:3000Страница входа (admin/admin)
Prometheushttp://localhost:9090Интерфейс Prometheus

Детальная проверка PostgreSQL

Убедитесь, что PostgreSQL настроен для logical replication:

docker compose exec postgres psql -U postgres -c "SHOW wal_level;"

Результат должен быть logical. Также проверьте параметры репликации:

docker compose exec postgres psql -U postgres -c "SHOW max_replication_slots;"
docker compose exec postgres psql -U postgres -c "SHOW max_wal_senders;"

Оба значения должны быть >= 10.

Проверка Kafka Connect

curl -s http://localhost:8083/ | jq .

Ожидаемый ответ:

{
  "version": "3.6.1",
  "commit": "...",
  "kafka_cluster_id": "..."
}

Список доступных коннекторов (Debezium должен быть в списке):

curl -s http://localhost:8083/connector-plugins | jq '.[].class'

Вы должны увидеть io.debezium.connector.postgresql.PostgresConnector.

Архитектура окружения

Docker Compose Stack

Полная среда для практических работ

DATA
PostgreSQL
:5433
STREAMING
Kafka
:9092
Schema Registry
:8081
Debezium Connect
:8083
MONITORING
Prometheus
:9090
Grafana
:3000
EXERCISES
JupyterLab
:8888

Основные потоки данных:

PostgreSQL → Debezium Connect (WAL)
Debezium Connect → Kafka (Events)
Kafka → Schema Registry (Schema)
Debezium Connect → Prometheus (Metrics)
Prometheus → Grafana (Dashboard)
Kafka → JupyterLab (Consume)
PostgreSQL → JupyterLab (Query)

Быстрый старт:

  • docker compose up -d — запустить всё окружение
  • localhost:8888 — JupyterLab для упражнений
  • localhost:8083 — Kafka Connect REST API
  • localhost:3000 — Grafana мониторинг
Проверка знаний
Почему лабораторное окружение использует порт 5433 для PostgreSQL вместо стандартного 5432?
Ответ
Порт 5432 часто занят локальной установкой PostgreSQL на компьютере разработчика. Docker маппит внешний порт 5433 на внутренний 5432 контейнера, позволяя обоим PostgreSQL-серверам работать одновременно. Внутри Docker-сети коннектор Debezium обращается к PostgreSQL по стандартному порту 5432.

Справочник портов

Используйте эту таблицу для доступа к сервисам:

СервисВнешний портВнутренний портURL
PostgreSQL54335432-
Kafka90929092-
Kafka Connect80838083http://localhost:8083
Schema Registry80818081http://localhost:8081
JupyterLab88888888http://localhost:8888
Grafana30003000http://localhost:3000
Prometheus90909090http://localhost:9090

Примечание для коннектора: Внутри Docker сети используйте внутренние адреса: database.hostname: postgres, database.port: 5432. Для подключения с хоста используйте localhost:5433.

Устранение неполадок

Ошибка “port already in use”

Если порт занят, найдите процесс и остановите его:

# Найти процесс на порту 5433
lsof -i :5433

# Или измените порт в labs/.env:
POSTGRES_PORT=5434

Сервисы не запускаются

Проверьте логи конкретного сервиса:

docker compose logs kafka
docker compose logs connect

Если видите ошибки памяти, увеличьте RAM в Docker Desktop.

Kafka Connect показывает “unhealthy”

Kafka Connect зависит от Kafka. Убедитесь, что Kafka полностью запущена:

docker compose ps kafka
# Должен показывать "healthy"

Если Kafka unhealthy, подождите 30 секунд или перезапустите:

docker compose restart kafka

ARM64 / Apple Silicon

Все образы в этом курсе протестированы на Apple Silicon (M1/M2/M3/M4) и работают без эмуляции Rosetta.

Управление окружением

Остановка (данные сохраняются)

docker compose down

Данные сохраняются в Docker volumes между перезапусками.

Полная очистка (удаление всех данных)

docker compose down -v

Это удалит все volumes — используйте для “чистого старта”.

Просмотр потребления ресурсов

docker stats

Что дальше?

Окружение готово! В следующем уроке мы развернем первый Debezium коннектор для PostgreSQL и увидим CDC-события в Kafka.

Проверьте понимание

Результат: 0 из 0
Аналитический
Вопрос 1 из 3. Почему лабораторное окружение использует отдельный контейнер для Kafka Connect вместо встраивания коннектора непосредственно в приложение через Embedded Engine?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс