Тема проекта: Сбор и анализ потоковых данных криптовалют.
Цель и задачи проекта
Цель проекта: обработать потоковые данные по криптовалютам и создать интерактивный дашборд.
- Собрать данные по криптовалютам из потока.
- Сохранить данные в хранилище и собрать витрину.
- Визуализировать данные в виде дашборда.
- Сделать выводы по выполненному проекту.
Какие технологии использовались
- Kafka
- S3 Minio
- ClickHouse
- Docker
- Parquet
- Python
Kafka
Цель использования:
Для реализации асинхронной и надежной передачи потоковых данных с источника
Почему выбрали:
Высокая отказоустойчивость и горизонтальная масштабируемость.
Поддержка множества клиентских библиотек и интеграций.
Возможность хранить данные как временное буферное хранилище.
Впечатления:
Плюсы: Отличная производительность при работе с большими объемами данных, гибкость в топологиях сообщений (topics, partitions, consumer groups).
Минусы: Сложности в настройке и мониторинге кластера, особенно без специализированных инструментов. Требует понимания концепций логгирования и партиционирования.
S3 MinIO
Цель использования:
Для долгосрочного хранения неструктурированных данных (сырые данные).
Почему выбрали:
Совместимость с AWS S3 API позволяет легко переносить решения в облако.
Бесплатный и open-source. Простая интеграция с другими компонентами системы.
Впечатления:
Плюсы: Простота развертывания, хорошая документация, поддержка multipart upload, шифрования и т.д.
Минусы: Не все функции облачного S3 доступны «из коробки», но для большинства задач хватает.
ClickHouse
Цель использования:
Для аналитической обработки больших объемов данных в режиме реального времени.
Почему выбрали:
Очень высокая скорость выполнения аналитических запросов.
Поддержка вставки миллионов строк в секунду.
Удобная SQL-совместимая оболочка.
Впечатления:
Плюсы: Невероятно быстрый движок для OLAP-запросов, особенно если правильно использовать движки таблиц (MergeTree и его вариации).
Минусы: Не предназначен для OLTP, некоторые операции обновления/удаления ограничены, может быть сложно настроить безопасность и кластеризацию без опыта.
Docker
Цель использования:
Для контейнеризации сервисов, упрощения развёртывания и изоляции окружений.
Почему выбрали:
Позволяет создавать воспроизводимые окружения.
Упрощает запуск и тестирование сервисов локально.
Облегчает деплой на разных стадиях CI/CD.
Впечатления:
Плюсы: Очень удобная система управления образами и контейнерами, активное сообщество, множество готовых образов.
Минусы: При увеличении числа сервисов начинает нужна оркестрация (например, Kubernetes), а также важно правильно организовать сетевую и дисковую политику.
Streamlit
Цель использования:
Разработка интерактивного пользовательского интерфейса для отображения результатов анализа данных и работы ML-моделей.
Почему выбрали:
Простота освоения и быстрое создание MVP.
Интеграция с популярными библиотеками (Pandas, Matplotlib, Plotly, Scikit-learn)
Не требует знания HTML/CSS/JavaScript для создания прототипов.
Впечатления:
Плюсы:
Очень простая и интуитивная API. Отлично подходит для экспериментов и быстрого показа результатов коллегам или заказчику.
Минусы:
Неподходящий выбор для масштабных, многостраничных или высоконагруженных приложений.
Parquet
Цель использования:
Хранение больших объёмов структурированных данных.
Почему выбрали:
Поддерживает сжатие и кодирование, что уменьшает размер хранимых данных.
Хорошо интегрируется с такими инструментами, как Pandas, ClickHouse, S3 и другими.
Позволяет сохранять схему данных вместе с самими данными.
Впечатления:
Плюсы:
Отличная производительность при чтении подмножества полей.
Хорошая совместимость между разными платформами и фреймворками.
Минусы:
Для просмотра содержимого без программной оболочки нужны специальные инструменты. Может быть избыточен для маленьких наборов данных.
Что получилось
Ссылки:
BI, Дашборд
Графики котировок со средними скользящими и кривые спредов
Видео демонстрация
Демонстрация проекта: rutube.ru
Выводы
- Цель проекта достигнута. Все поставленные задачи выполнены.
- Трудности были с настройкой Kafka.
- На выполнение проекта ушло две недели.
- Проект оказался полезным, я освоил новые для себя инструменты такие как Kafka, S3 Minio, Clickhouse. Полезность проекта оцениваю в 10 балов.