Flume Event
- event是flume中处理消息的基本单元,由零个或者多个header和正文body组成。
- Header 是 key/value 形式的,可以用来制造路由决策或携带其他结构化信息(如事件的时间戳或事件来源的服务器主机名)。你可以把它想象成和 HTTP 头一样提供相同的功能——通过该方法来传输正文之外的额外信息。
- Body是一个字节数组,包含了实际的内容。
- flume提供的不同source会给其生成的event添加不同的header,例如:
这是我测试时使用SyslogTCPSource,sink为FillRollSink,输出至文件中的event信息。有两个event,固定的header有:Severity、flume.syslog.status、Facility,最后一个domain_name是我自己通过拦截器添加的。Objavro.codecnullavro.schema?{"type":"record","name":"Event","fields":[{"name":"headers","type":{"type":"map","values":"string"}},{"name":"body","type":"bytes"}]} ?u 1?荍?只3L??<span style="color:#ff0000;">Severity</span>0&<span style="color:#ff0000;">flume.syslog.status</span>Invalid<span style="color:#ff0000;">Facility</span>0<span style="color:#ff0000;">domain_name</span>sina PYM:sina YDIP:81.168.44.33 QQLX:NS IPGS:3Severity0&flume.syslog.statusInvalidFacility0domain_namesina PYM:sina YDIP:111.168.44.33 QQLX:A IPGS:2?u 1?荍?只3L?
- 由于测试程序中只是实现了一个socket的客户端,发送字符串给flume,并没有严格按照syslog的标准格式构造消息(可参考RFC3164),因此flume.syslog.status的值为Invalid.
-
flume允许用户修改event,添加header,从而通过消息的内容对日志进行路由。具体需要使用的机制有:拦截器interceptor和选择器selector;
-
关于拦截器和选择器的原理介绍以及简单实例可参考官方用户手册以及《Apache Flume: Distributed Log Collection for Hadoop》(该书有中文版的译本,由冯佳冬翻译,看完之后受益匪浅)