Installation
- Deploy postgresql with init_db.sql
- Deploy hdfs
- Kafka + Zookeeper
- Deploy airflow with helm
- Configure required variables in airflow
- Configure airflow gitSync with this repository and set branch: main, subPath
airflow/dags - Build project and put shaded jar to /opt/jars/
- Unpause the DAG test-task-spark-app in Airflow
Как будете партицировать данные?
hdfs: Данные партицируются по timestamp попадания в kafka kafka: Партиционировать по году и номеру недели (в зависимости от объема данных при условии что timestamp существует в записи)
Что будете мониторить и как?
- Кафка
- Количество записаных/прочтенных данных
- Состояние реплик
- Оффсеты кафки
- Состояние партиций (всего партиций, оффлайн партиций)
- Lag (оффсет кафки - прочитаный оффсет спарк джобой per partition)
- ЦПУ
- Диск
- DB
- ЦПУ
- Диск
- Активные соединения
- HDFS
- Сколько данных хранится (Сколько инфы о данных в NameNode, сколько хранится данных в DataNode)
- Капасити
- Активны ноды
- Сдохшие ноды
- JVM
Что будете логгировать?
- Начало/завершение работы приложения
- Количество прочтенных записей
- Количество дублей
- Количество невалидных данных
- Ошибки
Что будете делать с оффсетом?
Оффсет для каждой партиции сохраняется в базу по завершении процессинга, каждый последующий запуск использует в качестве startOffset - предыдущий endOffset. Так же есть возможность задать batchSize для ограничения чтения данных, к примеру для historical load.
Сериализация данных?
json читается в dataframe и преобразуется в struct, вся работа проходит вне хипа, для увеличения производительности. Данные сохраняются в формате parquet, т.к. исходя из постановки задачи не ожидается Schema Evlution, а Spark не поддерживает схему On- Read.