Skip to content

Альтернативы

HTTP → Kafka прокси реализован с обязательной аутентификацией, использующей персональные токены. Это может быть недостатком в некоторых ситуациях.

Если ваш случай использования требует отправки событий OpenLineage в DataRentgen через HTTP, но без какой-либо аутентификации, ниже описаны некоторые альтернативы.

Fluentbit

Fluentbit — это легковесный, но мощный обработчик логов, написанный на C. Он может принимать HTTP запросы и записывать тело в топик Kafka.

Пример конфигурации:

fluent-bit.yml
pipeline:
    # принимаем HTTP запросы на порт 8002
    inputs:
      - name: http
        port: 8002
        mem_buf_limit: 50MB

    # Маршрутизация событий в партицию с использованием ключа сообщения
    filters:
      - name: lua
        match: '*'
        call: set_message_key
        code:  |
            function set_message_key(tag, timestamp, record)
            local new_record = record
            if record.run.facets.parent then
                if record.run.facets.parent.root then
                new_record.messageKey = "run:" .. record.run.facets.parent.root.job.namespace .. "/" .. record.run.facets.parent.root.job.name
                else
                new_record.messageKey = "run:" .. record.run.facets.parent.job.namespace .. "/" .. record.run.facets.parent.job.name
                end
            else
                new_record.messageKey = "run:" .. record.job.namespace .. "/" .. record.job.name
            end
            return 1, timestamp, new_record
            end

    # Записываем данные в топик Kafka
    outputs:
      - name: kafka
        match: '*'
        format: json
        timestamp_key: eventTime
        timestamp_format: iso8601_ns
        message_key_field: messageKey
        brokers: localhost:9093
        topics: input.runs
        rdkafka.security.protocol: SASL_PLAINTEXT
        rdkafka.sasl.mechanism: SCRAM-SHA-256
        rdkafka.sasl.username: data_rentgen
        rdkafka.sasl.password: changeme
        rdkafka.client.id: fluent-bit
        rdkafka.request.required.acks: 1
        rdkafka.log.connection.close: false
docker-compose.yml
services:
    fluent-bit:
        image: central-mirror.services.mts.ru/fluent/fluent-bit
        restart: unless-stopped
        command: --config /fluent-bit/etc/fluent-bit.yml
        volumes:
        - ./fluent-bit.yml:/fluent-bit/etc/fluent-bit.yml
        # Имена хостов Kafka должны быть разрешимы из сети контейнера
        network_mode: host