Apache Flume。具有多路复用通道选择器的正则表达式提取器

时间:2016-03-09 19:07:45

标签: regex flume

我按照Flume配置抓取具有特定数值的服务器日志条目并将它们推送到相应的  卡夫卡主题。

Roslyn.Scripting.Session session = roslynEngine.CreateSession();
session.Execute("124+241/2*5");

我使用更复杂的正则表达式进行了一些测试,并且# Name the components on this agent a1.sources = r1 a1.channels = c2 c3 # Describe/configure the source a1.sources.r1.type = spooldir a1.sources.r1.spoolDir = /home/user/spoolFlume a1.sources.r1.fileSuffix = .DONE a1.sources.r1.basenameHeader = true a1.sources.r1.deserializer.maxLineLength = 8192 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = regex_extractor a1.sources.r1.interceptors.i1.regex = (2725391) a1.sources.r1.interceptors.i1.serializers = id a1.sources.r1.interceptors.i1.serializers.id.name = project_id a1.sources.r1.selector.type = multiplexing a1.sources.r1.selector.header = project_id a1.sources.r1.selector.mapping.2725391 = c3 a1.sources.r1.selector.default = c2 a1.channels.c2.type = org.apache.flume.channel.kafka.KafkaChannel a1.channels.c2.brokerList=kafka10.profile:9092,kafka11.profile:9092,kafka12.profile:9092 a1.channels.c2.topic = flume_test_002 a1.channels.c2.zookeeperConnect = kafka10.profile:2181,kafka11.profile:2181,kafka12.profile:2181 #default = true a1.channels.c2.parseAsFlumeEvent = true a1.channels.c3.type = org.apache.flume.channel.kafka.KafkaChannel a1.channels.c3.brokerList = kafka10.profile:9092,kafka11.profile:9092,kafka12.profile:9092 a1.channels.c3.topic = flume_test_003 a1.channels.c3.zookeeperConnect = kafka10.profile:2181,kafka11.profile:2181,kafka12.profile:2181 a1.channels.c3.parseAsFlumeEvent = true # Bind the source and sink to the channel a1.sources.r1.channels = c2 c3 看起来都很好,但是当我尝试在Flume配置中使用它时,不会捕获所有条目。

现在我使用一个单词regexp,但即便如此,并非所有条目都被捕获,即并非所有'正确'条目都转到kafka主题(例如我在日志中有2个字符串'2725391',但处理后我可以看到卡夫卡只有一个条目。

似乎Flume配置有问题。任何建议都将非常感激。

更新2.更多 - 当我使用短文件(少于100个字符串)来解析所有作品时。对于大约2GB的文件,我错过了条目。

更新3.我找到了解析所有条目的方法。

cat | grep -E <regexp>

它有帮助,因为在Kafka频道中解析事件的标题中有一个奇怪的符号。我不知道它来自何处,因为在处理之前原始日志中没有这样的符号:/

a1.sources.r1.decodeErrorPolicy = IGNORE

1 个答案:

答案 0 :(得分:0)

解决方案是设置 JAVA_HOME 正确值并设置以下设置:

a1.sources.r1.decodeErrorPolicy = IGNORE

问题的根源是日志中某处的非UTF字符。