apache flume详情

  • 时间:2018-08-02 22:13 作者:从大数据说起 来源:从大数据说起 阅读:146
  • 扫一扫,手机访问
摘要:1.flume 核心概念l flume是一个分布式、可靠、和高可使用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,使用于收集数据;同时,Flume提供对数据进行简单解决,并写到各种数据接受方(比方文本、HDFS、Hbase等)的能力 。l flume的数据流由事件(Event
apache flume详情

1.flume 核心概念

l flume是一个分布式、可靠、和高可使用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,使用于收集数据;同时,Flume提供对数据进行简单解决,并写到各种数据接受方(比方文本、HDFS、Hbase等)的能力 。

l flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,而后Source会把事件推入(单个或者多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink解决完该事件。Sink负责持久化日志或者者把事件推向另一个Source。

1.1、Agent

用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。

1.2、Client

生产数据,运行在一个独立的线程。

1.3、Source

从Client收集数据,传递给Channel。可以接收外部源发送过来的数据。不同的 source,可以接受不同的数据格式。比方有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,假如目录中有文件产生,就会立刻读取其内容。

1.4、Sink

从Channel收集数据,运行在一个独立线程,而后送给外部源或者者其余source。如数据可以写入到HDFS或者者HBase中。

1.5、Channel

连接 sources 和 sinks ,这个有点像一个队列,是一个存储地,接收source的输出,直到有sink消费掉channel中的数据。Channel中的数据直到进入到下一个channel中或者者进入终端才会被删除。当sink写入失败后,可以自动重启,不会造成数据丢失,因而很可靠。

1.6、Events

可以是日志记录、 avro 对象等,Flume传输的数据的基本单位是event,假如是文本文件,通常是一行记录,这也是事务的基本单位。

2、Flume节点组成

Flume只有一种角色的节点:代理商节点(agent)。

Flume以agent为最小的独立运行单位。单agent由Source、Sink和Channel三大组件构成。

?Flume提供了大量内置的Source、Channel和Sink类型。不同类型的Source、Channel和Sink可以自由组合。组合方式基于使用户设置的配置文件,非常灵活。比方:Channel可以把事件暂存在内存里,也可以持久化到本地硬盘上。Sink可以把日志写入HDFS, HBase,甚至是另外一个Source等等。

?Flume支持使用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes。如下图:

Flume 允许多个 agent 连在一起,形成前后相连的多级跳。如下图:

3、Source、Sink和Channel三大组件

3.1、Source组件

Flume 支持 Avro,log4j,syslog 和 http post(body为json格式)。可以让应使用程序同已有的Source直接打交道,如AvroSource,SyslogTcpSource。也可以 写一个 Source,以 IPC 或者RPC 的方式接入自己的应使用,Avro和 Thrift 都可以(分别有NettyAvroRpcClient 和 ThriftRpcClient 实现了 RpcClient接口),其中 Avro 是默认的 RPC 协议。对现有程序改动最小的用方式是用是直接读取程序原来记录的日志文件,基本可以实现无缝接入,不需要对现有程序进行任何改动。对于直接读取文件 Source,有两种方式:

ExecSource: 以运行 Linux 命令的方式,持续的输出最新的数据,如tail -F 文件名 指令,在这种方式下,取的文件名必需是指定的。ExecSource 可以实现对日志的实时收集,但是存在Flume不运行或者者指令执行出错时,将无法收集到日志数据,无法保证日志数据的完整性。

SpoolSource: 监测配置的目录下新添加的文件,并将文件中的数据读取出来。需要注意两点:拷贝到 spool 目录下的文件不可以再打开编辑;spool目录下不可包含相应的子目录。SpoolSource 尽管无法实现实时的收集数据,但是可以用以分钟的方式分割文件,趋近于实时。假如应使用无法实现以分钟切割日志文件的话,可以两种收集方式结合用。在实际用的过程中,可以结合 log4j 用,用 log4j的时候,将 log4j 的文件分割机制设为1分钟一次,将文件拷贝到spool的监控目录。log4j 有一个 TimeRolling 的插件,可以把 log4j 分割文件到 spool 目录。基本实现了实时的监控。Flume 在传完文件之后,将会修改文件的后缀,变为 .COMPLETED(后缀也可以在配置文件中灵活指定)

Flume Source:

Source类型

说明

Avro Source

支持Avro协议(实际上是Avro RPC),内置支持

Thrift Source

支持Thrift协议,内置支持

Exec Source

基于Unix的command在标准输出上生产数据

JMS Source

从JMS系统(消息、主题)中读取数据,ActiveMQ已经测试过

Spooling Directory Source

监控指定目录内数据变更

Twitter 1% firehose Source

通过API持续下载Twitter数据,实验性质

Netcat Source

监控某个端口,将流经端口的每一个文本行数据作为Event输入

Sequence Generator Source

序列生成器数据源,生产序列数据

Syslog Sources

读取syslog数据,产生Event,支持UDP和TCP两种协议

HTTP Source

基于HTTP POST或者GET方式的数据源,支持JSON、BLOB表示形式

Legacy Sources

兼容老的Flume OG中Source(0.9.x版本)

3.2、Channel组件

当前有几个 channel 可供选择,分别是 Memory Channel, JDBC Channel , File Channel,Psuedo Transaction Channel。比较常见的是前三种 channel。

l MemoryChannel 可以实现高速的吞吐,但是无法保证数据的完整性。

l FileChannel保证数据的完整性与一致性。在具体配置FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。

File Channel 是一个持久化的隧道(channel),它持久化所有的事件,并将其存储到磁盘中。因而,即便 Java 虚拟机当掉,或者者操作系统崩溃或者重启,再或者者事件没有在管道中成功地传递到下一个代理商(agent),这一切都不会造成数据丢失。Memory Channel 是一个不稳固的隧道,其起因是因为它在内存中存储所有事件。假如java 进程死掉,任何存储在内存的事件将会丢失。另外,内存的空间收到 RAM大小的限制,而 File Channel 这方面是它的优势,只需磁盘空间足够,它即可以将所有事件数据存储到磁盘上。

l Flume Channel

Channel类型

说明

Memory Channel

Event数据存储在内存中 type = memory

JDBC Channel

Event数据存储在持久化存储中,当前Flume Channel内置支持,type=jdbc

File Channel

Event数据存储在磁盘文件中 type=file

Spillable Memory Channel

Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件(当前实验性的,不建议生产环境用)

Pseudo Transaction Channel

测试使用途

Custom Channel

自己设置Channel实现

3.3、Sink组件

Sink在设置存储数据时,可以向文件系统、数据库、hadoop存数据,在日志数据较少时,可以将数据存储在文件系中,并且设定肯定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。

Flume Sink:

Sink类型

说明

HDFS Sink

数据写入HDFS

Logger Sink

数据写入日志文件

Avro Sink

数据被转换成Avro Event,而后发送到配置的RPC端口上

Thrift Sink

数据被转换成Thrift Event,而后发送到配置的RPC端口上

IRC Sink

数据在IRC上进行回放

File Roll Sink

存储数据到本地文件系统

Null Sink

丢弃到所有数据

HBase Sink

数据写入HBase数据库

Morphline Solr Sink

数据发送到Solr搜索服务器(集群)

ElasticSearch Sink

数据发送到Elastic Search搜索服务器(集群)

Kite Dataset Sink

写数据到Kite Dataset,实验性质的

Custom Sink

自己设置Sink实现

  • 全部评论(0)
最新发布的资讯信息
【网页前端|HTML】最全面的前端开发指南(2019-07-15 12:57)
【系统环境|数据库】零基础如何快速学好大数据?(2019-06-29 12:27)
【系统环境|Linux】零基础如何学好大数据?必备需要学习知识(2019-06-18 11:54)
【系统环境|】Hadoop环境中管理大数据存储八大技巧(2019-06-15 11:01)
【系统环境|服务器应用】现在国内IT行业是不是程序员过多了?(2019-06-11 06:34)
【系统环境|服务器应用】新贵 Flutter(2) 自己设置 Widget(2019-06-11 06:34)
【系统环境|服务器应用】Android完整知识体系路线(菜鸟-资深-大牛必进之路)(2019-06-11 06:34)
【系统环境|服务器应用】Java程序员小伙经历三个月备战,终获阿里offer(2019-06-11 06:34)
【系统环境|服务器应用】每日一问:谈谈对 MeasureSpec 的了解(2019-06-11 06:34)
【系统环境|服务器应用】【科普】晶体管-1(2019-06-11 06:34)
手机二维码手机访问领取大礼包
返回顶部