大数据技术之Flume

Flume

概述

  1. Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
  2. Flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写到HDFS中
  3. Flume的版本更新相对稳定:
  • Flume1.0:Flume-ng Flume-ng和Flume-og不兼容。现在开发过程中一般使用的是Flume-ng
  • Flume0.9:Flume-og。Flume-og是单线程执行任务

数据流模型

单级流动

大数据技术之Flume_第1张图片

多剂流

大数据技术之Flume_第2张图片

合并

大数据技术之Flume_第3张图片

复流

大数据技术之Flume_第4张图片

基本概念

  1. Event:
  • 传输单元,Flume传输数据的基本单元,以Event的形式将数据从源头送至目的地。Event由Header和Body两部分组成,Header用来存放该evevt的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。
  • 一个Event就是一条日志,即在Flume中会将收集到的每一条日志封装成一个Event
  • Event本质上是一个json串,即Flume将收集到的日志封装成json,这个Event固定包含header和body两个部分
  1. Agent:是Flume中构成流动模型的基本单位
  • Source: 从数据源采集数据
  • Channel :临时存储数据
  • Sink: 将数据写到目的地

Source

  1. AVRO Source:接收被AVRO序列化之后的数据,可以结合AVRO Sink可以实现多级、扇入、扇出流动
  2. Exec Source:将命令的执行结果作为日志进行收集
  3. NetCat Source:监听指定的端口接收TCP请求,将TCP请求的数据作为日志进行收集
  4. Sequence Generator Source:不断产生递增的数字
  5. Spooling Directory Source:监听指定的目录,如果监听的目录中产生了新的文件,那么会自动收集新文件中的内容
  6. HTTP Source:监听HTTP请求,只能监听GET和POST请求,但是实际使用过程中,对GET请求的监听不稳定,所以一般只用这个Source来监听POST请求
  7. 扩展:自定义Source:如果实际生产中遇到的场景,Flume提供的Source无法解决,就需要自定义Source。如果需要自定义Source,需要写一个类实现EventDrivenSource/PollableSource
  • EventDrivenSource:事件驱动Source,被动型Source。需要自己定义线程获取数据发送数据
  • PollableSource:拉取Source,主动型Source。已经提供了预定义的线程来获取和发送数据

Channel

  1. Memory Channel:内存通道。将Source收集到的数据临时存储在内存中。Memory Channel的读写速度相对较快,但并不可靠,适合于高并发不要求可靠性的场景
  2. File Channel : 文件通道, 将Source收集到的数据临时存储在磁盘上。File Channel的读写速度相对比较慢,但是可靠,适用于要求可靠性但是传输速度相对较低的场景

Sink

  1. Logger Sink:将收集到的日志以指定的日志级别来进行记录或者打印。在记录的时候为了防止内容过多将屏幕占满,所以一旦数据超过16个字节那么就会自动省略后边的内容
  2. File_roll Sink:将收集到的数据存放到指定的目录中。如果不指定,那么会在指定的目录下,默认每隔30s生成一个小文件,致使生成大量的小文件,所以实际开发中会将这个属性来进行设置
  3. HDFS Sink:将收集到的数据写到HDFS上。如果不指定,会在HDFS上每隔30s生成一个小文件
  4. AVRO Sink:将数据用AVRO机制进行序列化之后传输到下一个节点上。AVRO Sink结合AVRO Source实现多级、扇入、扇出流动效果
  5. 扩展:自定义Sink。如果实际生产过程中,需要按照指定格式将数据输出,这个时候就需要使用自定义Sink。如果需要自定义Sink,那么需要写一个类实现Sink、Configurable接口

组件

  1. Selector - 选择器
  • Selector是Source的子组件
  • Selector存在2种模式:replicating和multiplexing
    • replicating:复制模式。一个节点在收到数据之后,会将数据进行复制然后分发给每一个节点,从而导致每一个节点收到的数据都是相同的
    • multiplexing:路由模式/多路复用模式。监听headers中指定的字段的值,根据值来确定发往哪个节点,所以每一个节点收到的数据是不同的
    • 如果不配置,默认是复制模式
  1. Interceptor - 拦截器
  • Interceptor是Source的子组件
  • Interceptor可以有多个,构成拦截器链
  1. 常用的Interceptor:
  • Timestamp:在数据的headers中添加一个时间戳字段,记录数据收集的时间。结合HDFS Sink实现日志的按天收集和存放
  • Host:在数据的headers中添加一个host字段,记录数据来源的主机
  • Static:在数据的headers中添加一个指定的字段
  • UUID:在数据的headers中添加一个id字段用于标记唯一性
  • Search and Replace:利用正则来搜索数据中符合格式的数据,然后将数据替换为指定的符号
  • Regex Filtering:利用正则来对数据进行过滤。只要数据符合正则的指定格式就会被拦截

Sink Group

一、概述
  1. 只接受一个 Sink
  2. 这是默认的策略。即如果不配置Processor,用的是这个策略
  3. 模式:复制模式,
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

一、概述
  1. 维护一个sink们的优先表。确保只要一个是可用的就事件就可以被处理
  2. 失败处理原理是,为失效的sink指定一个冷却时间,在冷却时间到达后再重新使用
  3. sink们可以被配置一个优先级,数字越大优先级越高
  4. 如果sink发送事件失败,则下一个最高优先级的sink将会尝试接着发送事件
  5. 如果没有指定优先级,则优先级顺序取决于sink们的配置顺序,先配置的默认优先级高于后配置的
  6. 在配置的过程中,设置一个group processor ,并且为每个sink都指定一个优先级
  7. 优先级必须是唯一的
  8. 另外可以设置maxpenalty属性指定限定失败时间

你可能感兴趣的:(大数据技术,flume)