Skip to content

Панель управления ETL-процессами

Notifications You must be signed in to change notification settings

8ubble8uddy/django-etl-panel

Repository files navigation

Django ETL Panel

python dockerfile last updated lint code style platform

Описание

Целью данной проекта является реализация сервиса для удобного управления процессом ETL, которое включает в себя запуск, остановку и обновление настроек ETL-скрипта. К настройкам относится любая метаинформация: название таблицы, какие поля доставать, какие события обрабатывать и другие настройки. Исходя из задачи была разработана панель управления ETL-процессами на фреймворке Django в связке с Celery для распределенного и асинхронного выполнения ETL-задач. Задачи делятся по способу переноса данных: одноразовая выгрузка или постоянная синхронизация. Обработка и анализ данных осуществляется с помощью библиотеки Pandas. В качестве тестирования и демонстрации результата используются заполненная база данных SQLite и два сторонних микросервиса: административная панель c реляционной базой данных PostgreSQL и API c нереляционным хранилищем документов ElasticSearch.

Архитектура

Архитектура

  • AAdmin Panel для загрузки и редактирования фильмов.
  • BAsync API для полнотекстового поиска фильмов.
  • CETL Panel для управления ETL-процессами.
  • 1 — прокси-сервер Nginx, который обрабатывает HTTP-запросы к Django и Celery Flower.
  • 2 — фреймворк Django как основа проекта.
  • 3 — база данных PostgreSQL для хранения метаинформации ETL-процессов.
  • 4 — очередь задач Celery, которые выполняют ETL-скрипты в асинхронном фоновом режиме.
  • 5 — брокер сообщений Redis для Celery, чтобы отслеживать наличие новых задач.
  • 6 — шедулер Celery Beat для планирования задач, которые должны выполняться воркером Celery.
  • 7 — веб-инструмент Celery Flower для мониторинга Celery в режиме реального времени.

Как запустить проект:

Клонировать репозиторий и перейти внутри него в директорию /infra:

git clone https://github.com/8ubble8uddy/django-etl-panel.git
cd django-etl-panel/infra/

Создать файл .env и добавить настройки для проекта:

nano .env
# PostgreSQL ETL_DATABASE
POSTGRES_ETL_DB=etl_database
POSTGRES_ETL_USER=postgres
POSTGRES_ETL_PASSWORD=postgres
POSTGRES_ETL_HOST=postgres_etl
POSTGRES_ETL_PORT=5432

# PostgreSQL MOVIES_DATABASE
POSTGRES_MOVIES_DB=movies_database
POSTGRES_MOVIES_USER=app
POSTGRES_MOVIES_PASSWORD=123qwe
POSTGRES_MOVIES_HOST=postgres_movies
POSTGRES_MOVIES_PORT=5432

# Elasticsearch
ELASTIC_HOST=elastic
ELASTIC_PORT=9200

# Redis
REDIS_HOST=redis
REDIS_PORT=6379

# Django ETL Panel
DJANGO_ETL_ALLOWED_HOSTS=localhost,127.0.0.1,[::1],etl_panel
DJANGO_ETL_SECRET_KEY=django-insecure-)%ceik*k#kl+x1tc!_=*n64=88gev=m(j!@c8r-e63q3e^58mo

# Django Admin Panel
DJANGO_ADMIN_SUPERUSER_USERNAME=admin
[email protected]
DJANGO_ADMIN_SUPERUSER_PASSWORD=1234
DJANGO_ADMIN_ALLOWED_HOSTS=localhost,127.0.0.1,[::1],admin_panel
DJANGO_ADMIN_SECRET_KEY=django-insecure-_o)z83b+i@jfjzbof_jn9#%dw*5q2yy3r6zzq-3azof#(vkf!#

# FastAPI Async API
FASTAPI_DEBUG=True

Развернуть и запустить проект в контейнерах:

docker-compose up -d

Перейти по ссылке http://127.0.0.1/etl и ввести логин (admin) и пароль(1234):

джанго админка

По секции Processes получаем список ETL-процессов:

процессы2

Выбираем процесс начиная снизу, меняем поле Status на Active и сохраняем:

активация2

Процессы с PostgreSQL в Elasticsearch выполняют синхронизацию данных:

синк2

Проверить результат загрузки данных из SQLite в PostgreSQL можно по ссылке http://127.0.0.1/admin (логин: admin, пароль: 1234):

результат1

И результат синхронизации из PostgreSQL в Elasticsearch по ссылке http://127.0.0.1/api/v1/films:

результат2

Автор: Герман Сизов

About

Панель управления ETL-процессами

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published