我已将Apache Flume
配置为在JSON
来源中接收消息(HTTP
类型)。我的接收器是MongoDB
和HBase
。
如何根据指定字段将邮件写入不同的集合和表?
例如:我们假设我们有T_1
和T_2
。现在有一条传入消息应该保存在T_1
中。如何处理这些消息并将其分配到何处保存?
答案 0 :(得分:0)
尝试使用Multiplexing Channel Selector
。默认值(Replicating Channel Selector
将源生成的Flume事件复制到其所有已配置的通道。但是,多路复用可以将事件放入特定通道,具体取决于Flume事件中标头的值。
为了根据应用程序逻辑创建这样的标头,您需要为HTTPSource创建自定义处理程序。这可以通过实现API的HttpSourceHandler
接口轻松完成。
答案 1 :(得分:0)
您可以使用正则表达式标记消息类型+多路复用以将其发送到正确的目的地。 例如,基于消息“TEST”
字符串/字段的正则表达式
agent.sources.s1.interceptors.i1.type=regex_extractor
agent.sources.s1.interceptors.i1.regex=(TEST1)
将拦截器分配给序列化器SE1
agent.sources.s1.interceptors.i1.serializers=SE1
agent.sources.s1.intercetpros.i1.serializers.SE1.name=Test
发送到所需的频道,频道(c1,c2),您可以映射到不同的接收器
agent.sources.s1.selector.type=multiplexing
agent.sources.s1.selector.header=Test
agent.sources.s1.selector.mapping.Test=c1
测试正则表达式的所有事件将转到c1频道,其他事件将默认为C2
agent.sources.s1.selector.default=c2