Flume: (ИЛИ) RegEx и мультиплексирование - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь настроить Flume Agent, который может распознавать два конкретных кода для валюты: EUR или USD.Мне также нужно сохранить (но не идентифицировать) любую другую строку.

Я следую очень хорошему примеру .Моя конфигурация выглядит следующим образом:

a.sources.s.interceptors = i
a.sources.s.interceptors.i.type = regex_extractor
a.sources.s.interceptors.i.regex = ^(EUR)|^(USD)|^(?!EUR|USD).*
a.sources.s.interceptors.i.excludeEvents = false
a.sources.s.interceptors.i.serializers = t
a.sources.s.interceptors.i.serializers.t.name = currency


a.sources.s.selector.type = multiplexing
a.sources.s.selector.header = currency
a.sources.s.selector.mapping.EUR = EUR_cnl
a.sources.s.selector.mapping.USD = USD_cnl
a.sources.s.selector.mapping.GNL = GNL_cnl

Моя проблема в том, что RegEX, кажется, работает только для евро или в зависимости от того, что будет первым.На самом деле, я не уверен, что мое отображение корректно для опции «поймать остальных».

Любые предложения приветствуются.

Спасибо.

1 Ответ

0 голосов
/ 21 октября 2018

Сериализатор Flume назначит группы захвата сериализаторам по порядку.Вы видите только первый результат, потому что у вас определен только один сериализатор.У вас есть два варианта:

Захват всех валют в пределах одной группы захвата

a.sources.s.interceptors.i.regex = ^(EUR|USD|(?:!EUR|USD).*)

В качестве альтернативы можно захватить все валюты отдельно и добавить сериализатор для каждой группы захвата

a.sources.s.interceptors.i.regex = ^(EUR)|^(USD)|^(?!EUR|USD).*
a.sources.s.interceptors.i.excludeEvents = false
a.sources.s.interceptors.i.serializers = t1 t2 t3
a.sources.s.interceptors.i.serializers.t1.name = currency1_EUR
a.sources.s.interceptors.i.serializers.t2.name = currency1_USD
a.sources.s.interceptors.i.serializers.t3.name = currency2_XXX
...