Flume: (OR) 正则表达式和多路复用

Flume: (OR) RegEx and multiplexing

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

我跟得很好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 或以先到者为准。事实上,我不确定我的映射对于 "catch the rest" 选项是否正确。

欢迎提出任何建议。

谢谢。

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