前言
: 它是一种分布式,可靠且可用的服务。
Flume 简介
- Flume是一种分布式,可靠并且可用的服务,用于有效地收集,聚合和移动大量日志数据。
- 它具有基于 流数据流 的简单灵活的体系结构。
- 它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。
- 他使用一个简单的可扩展的数据模型,允许在线分析应用程序。
Flume 作用
- Flume 采集文件,scoket数据包等各种形式源数据
- 将采集到的数据输出到HDFS,hbase,hive,kafka等众多外部存储系统中。
- 一般的采集需求,通过对 flume 的简单配置即可实现。
- Flume 针对特殊场景也具备良好的自定义扩展能力,所以 flume 可以适用于大部分的日常数据采集场景。
Flume 运作原理
- Flume 的核心角色为 Agent(Agent本身是一个 Java 进程),Flume分布式系统常常是由很多的Agent连接而形成的。
- Agent内部有三个组件,一是Source采集源,用于跟数据对接,获取数据。二是Channel通道,Agent 内部的数据传输通道用于从source将数据传递到Sink。三是Sink目标地,采集数据的传送目的地,用于往下一级agent传递数据或者最终存储系统传递数据。
event 事件
: event 将传输的数据进行封装,是 flume 传输数据的基本单位(也是事务的基本单位)
概念
: flume的核心是把数据从数据源(source)收集过来,再将收集到数据收到指定的目的地(sink)。为了保证输送的过程一定成功,再送到目的地(sink)之前,会先缓存数据(channel),代数据真正达到目的地(sink)后,Flume在删除自己缓存的数据。
: 在整个数据的传输过程中,流动的是event,即事务保证是在 event 级别进行。那么什么是 event 呢? event 将传输的数据进行封装,是 flume 传输数据的基本单位(也是事务的基本单位),event从source,流向channel,再到sink,本身为一个字节数组,并携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
:一个完整的event包括:event headers,event body,event信息(即文本文件中的单行记录),其中event信息就是flume收集到的日记记录。
Flume 工作流程
- source不断的接收数据,将数据封装成一个一个的event。然后将event发送给channel,channel作为一个缓冲区会将这些数据临时存放,随后sink会将 channel中的event数据发送到指定的地方(如 HDFS)。
- 注意: 只有在sink将channel中的数据成功发送出去之后,channel才会将临时event数据进行删除,这种机制保证了数据传输的可靠性于安全性。
Flume 用法
- flume之所以这么神奇–其原因也在于flume可以支持多级flume的agent,即flume可以前后相继形成多级的复杂流动,例如sink可以将数据写到下一个agent的source中,这样的话就可以连成串了,可以整体处理了。此外,flume还支持扇入(fan-in),扇出(fan-out)。所谓扇入就是source可以接受多个输入,所谓扇出就是sinl可以将数据输出多个目的地中。
数据流合并(扇入流)
: 在做日志收集的时候一个常见的场景就是:大量的生产日志的客户端发送数据到少量的附属于存储子系统的消费者agent。例如,从数百个web服务器中收集日志,他们发送数据到十几个负责将数据写入HDFS集群的agent - - > 这个可在Flume中实现,需要配置大量第一层的agent,每一个agent都有一个 avro sink(avro:flume通过avro方式在两台bai机器之间进行数据du传输),让他们都指向同一个agent的 avro source(强调一下,在这样一个场景下你也可以使用 thrift source/sink/client)。再第二层 agent 上 source将收到的 event 合并到一个channel中,event被一个sink消费到它的最终目的地。
数据流复用(扇出流)
: Flume 支持多路输出 event 流到一个或多个目的地。这是靠定义一个多路数据流实现的,他可以实现复制和选择性路由一个event到一个或者多个channel。
Flume特性
1.可靠性
:事务型的数据传递,保证数据的可靠性,一个日志交给flume来处理,不会出现此日志丢失或未被处理的情况。
2.可恢复性
:通道可以以内存或文件的方式实现,内存更快,但不可回复。文件较慢但提供了可恢复性。