Skip to content

Архитектура

Компоненты

Data.Rentgen построен с использованием следующих компонентов:

  • Клиенты OpenLineage и интеграции со сторонними модулями (например, Apache Spark, Apache Airflow).
  • message-broker, получающий события в формате JSON.
  • message-consumer, обрабатывающий JSON-сообщения.
  • database для хранения обработанных и очищенных данных.
  • server, предоставляющий данные из базы данных.
  • frontend, обращающийся к REST API для навигации по созданным сущностям и графу линейности.
  • http2kafka (опционально), прокси для отправки событий OpenLineage в Kafka через HTTP API.

Диаграмма архитектуры

    @startuml
        title Архитектура Data.Rentgen
        skinparam componentStyle rectangle
        left to right direction

        frame "Data.Rentgen" {
            queue "Kafka" as KAFKA
            component "Потребитель сообщений" as CONSUMER
            database "PostgreSQL" as DB
            component "REST API сервер" as API
            component "Фронтенд" as FRONTEND
            component "HTTP2Kafka" as HTTP2KAFKA
        }

        frame "OpenLineage" {
            agent "OpenLineage Spark" as SPARK
            agent "OpenLineage Airflow" as AIRFLOW
            agent "OpenLineage Hive" as HIVE
            agent "OpenLineage Flink" as FLINK
            agent "OpenLineage dbt" as DBT
            agent "OpenLineage прочие" as OTHER
            agent "OpenLineage KafkaTransport" as KAFKA_TRANSPORT
            agent "OpenLineage HttpTransport" as HTTP_TRANSPORT
        }

        actor "Пользователь" as USER

        [SPARK] --> [KAFKA_TRANSPORT]
        [AIRFLOW] --> [KAFKA_TRANSPORT]
        [HIVE] --> [KAFKA_TRANSPORT]
        [FLINK] --> [KAFKA_TRANSPORT]
        [DBT] --> [KAFKA_TRANSPORT]
        [KAFKA_TRANSPORT] --> [KAFKA]

        [OTHER] --> [HTTP_TRANSPORT]
        [HTTP_TRANSPORT] --> [HTTP2KAFKA]
        [HTTP2KAFKA] --> [KAFKA]

        [KAFKA] --> [CONSUMER]
        [CONSUMER] --> [DB]

        [API] --> [DB]
        [FRONTEND] --> [API]
        [USER] --> [FRONTEND]

    @enduml