Flume:(OR)RegEx和多路复用

时间:2018-10-21 06:31:35

标签: regex flume multiplexing

我正在尝试建立一个能够识别两种特定货币代码的水槽代理:欧元或美元。我还需要保留(但不能识别)任何其他字符串。

我遵循的是非常好的example。我的配置如下:

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似乎仅适用于EUR或以先到者为准。实际上,我不确定我的映射是否适用于“捕获其余部分”选项。

欢迎任何建议。

谢谢。

1 个答案:

答案 0 :(得分:0)

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