DSL-interceptor#

Реализует интерфейсы ProducerInterceptor и ConsumerInterceptor, позволяет преобразовывать тело сообщений при помощи DSL модуля declarative-mapper продукта EVP. На вход и выход модуля ожидается одно сообщение.

Подключение к Kafka Consumer#

  1. Добавить актуальную версию перехватчика в зависимости проекта.

  2. Добавить настройки перехватчика к настройкам kafka-клиента.

  3. Сконфигурировать трансформацию с помощью DSL.

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

Конфигурация Kafka client#

...
# 1) Подключить interceptor
interceptor.classes=ru.sbt.ss.kafka.clients.dsl.DslInterceptor

# 2) Указать путь до конфигурационного файла DSL:
interceptor.dsl.config=/users/test/kafka/dsl-interceptor/data/interceptor.conf

Пример конфигурационного файла DSL#

{
    dsl: "simple.tr"
    environmentVariables: {
        envName: "envValue"
    }
    input: {
        type: "avro"
        schemaName: "simpleSchema.avsc"
    }
    output: {
        type: "json"
    }
}

, где:

  • dsl — расположение правил трансформации;

  • environmentVariables — используемые переменные среды;

  • input — формат входящего события;

  • output — формат исходящего события.

Значения полей input и output могут иметь значения:

  1. Событие в формате JSON:

    • type — со значением JSON;

    • encoding — используемая кодировка.

  2. Событие в формате XML:

    • type — со значением XML;

    • encoding — используемая кодировка.

  3. Событие в формате CSV:

    • type — со значением CSV;

    • encoding — используемая кодировка;

    • columnSeparator — разделитель полей событий;

    • fieldNames — список имен полей события для использования при трансформации, также определяет порядок полей.

  4. Объект с полями:

    • type — со значением AVRO;

    • schema — список схем с указанием пути в path; объект, имеющий логическое поле default со значением true, будет считаться схемой по умолчанию.

Загрузка конфигурации/схем из classpath#

Для загрузки конфигурации/схем из classpath необходимо указать протокол classpath:// в пути до файла, например:

  • для файла конфигурации: interceptor.dsl.config=classpath://dsl-interceptor/data/interceptor.conf

  • для файла DSL: dsl: "classpath://simple.tr"

  • для AVRO-схемы: schemaName: "classpath://simpleSchema.avsc"

Относительные пути в конфигурации#

Относительные пути до файлов в конфигурации обычно разрешаются относительно директории запуска приложения.

В некоторых случаях (для автоматических установок, например, для установок с помощью скриптов) может быть полезно явно указать root-директорию, относительно которой будут разрешаться относительные пути:

  • interceptor.config.root.dir (общая для всех перехватчиков с подобной настройкой);

  • interceptor.dsl.config.root.dir (переопределяет общую настройку).

Данная настройка не применяется к путям в classpath (classpath://path/to/file.txt)

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

interceptor.dsl.config.root.dir=/full/path/to
# interceptor.config.root.dir=/full/path/to

# /full/path/to/validator.conf
interceptor.dsl.config=validator.conf

Также работает и для путей в конфигурационном файле:

{
    # /full/path/to/simple.tr
    dsl: "simple.tr"
    environmentVariables: {
        envName: "envValue"
    }
    input: {
        type: "avro"
        # /full/path/to/simpleSchema.avsc
        schemaName: "simpleSchema.avsc"
    }
    output: {
        type: "json"
    }
}