大数据技术之Flume
Flume概述Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写到HDFS中Flume的版本更新相对稳定:Flume1.0:Flu
·
Flume
概述
- Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
- Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写到HDFS中
- Flume的版本更新相对稳定:
- Flume1.0:Flume-ng Flume-ng和Flume-og不兼容。现在开发过程中一般使用的是Flume-ng
- Flume0.9:Flume-og。Flume-og是单线程执行任务
数据流模型
单级流动
多剂流
合并
复流
基本概念
- Event:
- 传输单元,Flume传输数据的基本单元,以Event的形式将数据从源头送至目的地。Event由Header和Body两部分组成,Header用来存放该evevt的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。
- 一个Event就是一条日志,即在Flume中会将收集到的每一条日志封装成一个Event
- Event本质上是一个json串,即Flume将收集到的日志封装成json,这个Event固定包含header和body两个部分
- Agent:是Flume中构成流动模型的基本单位
- Source: 从数据源采集数据
- Channel :临时存储数据
- Sink: 将数据写到目的地
Source
- AVRO Source:接收被AVRO序列化之后的数据,可以结合AVRO Sink可以实现多级、扇入、扇出流动
- Exec Source:将命令的执行结果作为日志进行收集
- NetCat Source:监听指定的端口接收TCP请求,将TCP请求的数据作为日志进行收集
- Sequence Generator Source:不断产生递增的数字
- Spooling Directory Source:监听指定的目录,如果监听的目录中产生了新的文件,那么会自动收集新文件中的内容
- HTTP Source:监听HTTP请求,只能监听GET和POST请求,但是实际使用过程中,对GET请求的监听不稳定,所以一般只用这个Source来监听POST请求
- 扩展:自定义Source:如果实际生产中遇到的场景,Flume提供的Source无法解决,就需要自定义Source。如果需要自定义Source,需要写一个类实现EventDrivenSource/PollableSource
- EventDrivenSource:事件驱动Source,被动型Source。需要自己定义线程获取数据发送数据
- PollableSource:拉取Source,主动型Source。已经提供了预定义的线程来获取和发送数据
Channel
- Memory Channel:内存通道。将Source收集到的数据临时存储在内存中。Memory Channel的读写速度相对较快,但并不可靠,适合于高并发不要求可靠性的场景
- File Channel : 文件通道, 将Source收集到的数据临时存储在磁盘上。File Channel的读写速度相对比较慢,但是可靠,适用于要求可靠性但是传输速度相对较低的场景
Sink
- Logger Sink:将收集到的日志以指定的日志级别来进行记录或者打印。在记录的时候为了防止内容过多将屏幕占满,所以一旦数据超过16个字节那么就会自动省略后边的内容
- File_roll Sink:将收集到的数据存放到指定的目录中。如果不指定,那么会在指定的目录下,默认每隔30s生成一个小文件,致使生成大量的小文件,所以实际开发中会将这个属性来进行设置
- HDFS Sink:将收集到的数据写到HDFS上。如果不指定,会在HDFS上每隔30s生成一个小文件
- AVRO Sink:将数据用AVRO机制进行序列化之后传输到下一个节点上。AVRO Sink结合AVRO Source实现多级、扇入、扇出流动效果
- 扩展:自定义Sink。如果实际生产过程中,需要按照指定格式将数据输出,这个时候就需要使用自定义Sink。如果需要自定义Sink,那么需要写一个类实现Sink、Configurable接口
组件
- Selector - 选择器
- Selector是Source的子组件
- Selector存在2种模式:replicating和multiplexing
- replicating:复制模式。一个节点在收到数据之后,会将数据进行复制然后分发给每一个节点,从而导致每一个节点收到的数据都是相同的
- multiplexing:路由模式/多路复用模式。监听headers中指定的字段的值,根据值来确定发往哪个节点,所以每一个节点收到的数据是不同的
- 如果不配置,默认是复制模式
- Interceptor - 拦截器
- Interceptor是Source的子组件
- Interceptor可以有多个,构成拦截器链
- 常用的Interceptor:
- Timestamp:在数据的headers中添加一个时间戳字段,记录数据收集的时间。结合HDFS Sink实现日志的按天收集和存放
- Host:在数据的headers中添加一个host字段,记录数据来源的主机
- Static:在数据的headers中添加一个指定的字段
- UUID:在数据的headers中添加一个id字段用于标记唯一性
- Search and Replace:利用正则来搜索数据中符合格式的数据,然后将数据替换为指定的符号
- Regex Filtering:利用正则来对数据进行过滤。只要数据符合正则的指定格式就会被拦截
Sink Group
一、概述
- 只接受一个 Sink
- 这是默认的策略。即如果不配置Processor,用的是这个策略
- 模式:复制模式,
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2 a1.sinkgroups.g1.processor.type = failover a1.sinkgroups.g1.processor.priority.k1 = 5 a1.sinkgroups.g1.processor.priority.k2 = 10 a1.sinkgroups.g1.processor.maxpenalty = 10000
Failover Sink Processor
一、概述
- 维护一个sink们的优先表。确保只要一个是可用的就事件就可以被处理
- 失败处理原理是,为失效的sink指定一个冷却时间,在冷却时间到达后再重新使用
- sink们可以被配置一个优先级,数字越大优先级越高
- 如果sink发送事件失败,则下一个最高优先级的sink将会尝试接着发送事件
- 如果没有指定优先级,则优先级顺序取决于sink们的配置顺序,先配置的默认优先级高于后配置的
- 在配置的过程中,设置一个group processor ,并且为每个sink都指定一个优先级
- 优先级必须是唯一的
- 另外可以设置maxpenalty属性指定限定失败时间
更多推荐
所有评论(0)