大数据干货系列--Flume总结
Posted 爱上终身学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据干货系列--Flume总结相关的知识,希望对你有一定的参考价值。
本文共计1365字,预计阅读时长六分钟
Flume总结
一、本质
Flume是一个分布式、可信任的弹性系统,用于高效收集、汇聚和移动大规模日志信息,从多种不同的数据源到一个集中的数据存储中心
二、Flume解决了什么问题
• 支持在日志系统中定制各类数据发送方,用于收集数据
• Flume提供对数据进行简单处理,并写道各种数据接收方(可定制)的能力
– 支持各种接入资源数据的类型以及接出数据类型
– 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等
– 可以被水平扩展
三、Flume Core
3.1外部架构
0) Event事件:Flume使用Event对象来作为传递数据的格式,是内部数据传输的最基本单元,由两部分组成:转载数据的字节数组+可选头部
1) Data Generators数据发生器:(如:facebook,twitter)产生数据的地方
2) Agent代理器:从发生器接收数据,或者从其他的Agent接收,然后迅速的将获取的数据传给下一个目的节点Agent
3) Data Collector数据收容器:从各个agent上汇集数据并将采集到的数据存入到HDFS或者HBase中
3.2 Agent组件
Agent主要由Source、Channel、Sink三个组件组成,其他可选的组件还有Intercepter,Selector。
1) Source源:
• 该外部源将它的事件以Flume可以识别的格式发送到Flume中
• 当一个Flume源接收到一个事件时,其将通过一个或者多个通道存储该事件
2) Channel通道:
• 采用被动存储的形式,即通道会缓存该事件直到该事件被sink组件处理
• 可以通过参数设置event的最大个数
• Flume通常选择FileChannel,而不使用Memory Channel
– Memory Channel:内存存储事务,吞吐率极高,但存在丢数据风险
– File Channel:本地磁盘的事务实现模式,保证数据不会丢失(WAL实现)
3) Sink 槽:
• Sink会将事件从Channel中移除,并将事件放置到外部数据介质上
– 通过Flume HDFS Sink将数据放置到HDFS中,或者放置到下一个Flume的Source,等到下一个Flume处理。
– 对于缓存在通道中的事件,Source和Sink采用异步处理的方式
• Sink成功取出Event后,将Event从Channel中移除
• Sink必须作用于一个确切的Channel
• 不同类型的Sink:
– 存储Event到最终目的的终端:HDFS、Hbase
– 自动消耗:Null Sink
– 用于Agent之间通信:Avro
4) Interceptor拦截器:
• 位于Source的一组拦截器,按照预设的顺序必要地方对events进行过滤和自定义的
处理逻辑实现
• 在app(应用程序日志)和 source 之间的,对app日志进行拦截处理的。也即在日志进入到source之前,对日志进行一些包装、清新过滤等等动作
• 官方上提供的已有的拦截器有:
– Timestamp Interceptor:在event的header中添加一个key叫:timestamp,value为当前的时间戳
– Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip
– Static Interceptor:可以在event的header中添加自定义的key和value
– Regex Filtering Interceptor:通过正则来清洗或包含匹配的events
– Regex Extractor Interceptor:通过正则表达式来在header中添加指定的key,value则为正则匹配的部分
• flume的拦截器也是chain形式的,可以对一个source指定多个拦截器,按先后顺序依次处理
5) selector 通道选择器:
• 位于source和channel之间,故称通道选择器,主要有两种类型:
– Replicating Channel Selector (default):将source过来的events发往所有channel
– Multiplexing Channel Selector:而Multiplexing 可以选择该发往哪些channel
• Multiplexing 需要判断header里指定key的值来决定分发到某个具体的channel。
在不同的服务器上运行,我们可以在 source1上加上一个 host 拦截器,这样可以通过header中的host来判断event该分发给哪个channel。
而这里是在同一个服务器上,由host是区分不出来日志的来源的,这时可以通过设置上游不同的Source就可以区分日志的来源。
3.3 Flume的可靠性
• Flume保证单次跳转可靠性的方式:传送完成后,该事件才会从通道中移除
• Flume使用事务性的方法来保证事件交互的可靠性。
• 整个处理过程中,如果因为网络中断或者其他原因,在某一步被迫结束了,这个数据会在下一次重新传输。
• Flume可靠性还体现在数据可暂存上面,当目标不可访问后,数据会暂存在Channel中,等目标可访问之后,再进行传输
• Source和Sink封装在一个事务的存储和检索中,即事件的放置或者提供由一个事务通过通道来分别提供。这保证了事件集在流中可靠地进行端到端的传递。
四、Flume案例框架
以上.
如果觉得本文对你有帮助,可以点个赞表示支持呗!
如果有任何意见和建议,也欢迎再下方留言~
点击这里查看往期精彩内容:
以上是关于大数据干货系列--Flume总结的主要内容,如果未能解决你的问题,请参考以下文章