Apache Flume日志收集系统简介
Apache Flume是一个分布式、可靠、可用的系统,用于从大量不同的源有效地收集、聚合、移动大量日志数据进行集中式数据存储。
Flume简介
Flume的核心是Agent,Agent中包含Source、Channel、Sink。Agent是最小的独立运行单位。在Agent中,数据流向为Source->Channel->Sink。

其中,
Source:收集数据,传递给Channel。支持多种收集方式,如RPC、syslog、监控目录。
Channel:数据通道,接收Source的数据并储存,传递给Sink。Channel中的数据在被Sink消费前会一直保存,等Sink成功把数据发送到下一跳Channel或最终目的地后才会删除缓存的数据。
Sink:消费Channel中的数据,传递到下一跳Channel或最终目的地,完成后将数据从Channel中移除。
Flume传输的数据的基本单位是Event,Event同时也是事务操作的基本单位。通常传输的日志内容存储在Event中。Event由可选的header和载有数据的byte array构成。

Flume支持多个Agent相连,形成多级Agent。此时上一级Sink和下一级Source都必须使用Avro协议。

使用多级Flume可以实现日志的聚合,第一层Agent接收日志,第二层Agent统一处理。

Flume支持将流从一个Source扇出到多个Channel。有两种模式的扇出,复制和复用。在复制流程中,事件被发送到所有配置的通道。在复用的情况下,事件仅发送到合格信道的子集。

Avro
Apache Avro是一种数据序列化系统。它是一个基于 RPC 的框架,被 Apache 项目广泛用于数据存储和通信。Avro提供了丰富的数据结构、紧凑快速的二进制数据格式、与动态语言的简单集成。
Avro 依赖于与数据存储在一起的模式。因为没有每个值的开销,实现了轻松而又快速的序列化。当在RPC中使用Avro时,客户端和服务器在连接握手中交换模式。Avro模式是使用JSON定义的,字段在客户端和服务器之间的对应很容易得到解决。
Source
Flume支持多种类型的Source,包括Avro、Thrift、Exec、JMS、Spooling Directory、Taildir、Kafka、NetCat、Sequence Generator、Syslog Sources、HTTP、Stress、Custom、Scribe。
安装后测试时,可以使用NetCat Source监听一个端口,然后Telnet登录该端口输入字符串即可。
程序接入最便捷的方式是让Flume读取现有的日志文件,可以使用如下Source:
Taildir Source:观察指定的文件,并在检测到添加到每个文件的新行后几乎实时地尾随它们。
Spooling Directory Source:监测配置的目录下新增的文件,并将文件中的数据读取出来。需要注意两点:拷贝到 spool 目录下的文件不可以再打开编辑;spool 目录下不可包含相应的子目录。
Exec Source:以运行Linux命令的方式,持续的输出最新的数据,如tail -F文件名指令。
Channel
Flume支持多种类型的Channel,包括Memory、JDBC、Kafka、File、Spillable Memory、Custom、Pseudo Transaction。其中,Memory Channel 可以实现高速的吞吐,但是无法保证数据的完整性;File Channel 是一个持久化的隧道(channel),它持久化所有的事件,并将其存储到磁盘中。
Sink
Flume支持多种类型的Sink,包括HDFS、Hive、Logger、Avro、Thrift、IRC、File Roll、Null、HBase、MorphlineSolr、Elastic Search、Kite Dataset、Kafka、Custom。Sink在设置存储数据时,可以向文件系统、数据库、Hadoop存数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。
简单使用示例
创建example.conf文件,内容如下
- # 配置一个agent,名称为a1,Source、Channel、Sink分别只有1个
- a1.sources = r1
- a1.sinks = k1
- a1.channels = c1
- # 配置Source,类型为netcat,监听本机的44444端口
- a1.sources.r1.type = netcat
- a1.sources.r1.bind = localhost
- a1.sources.r1.port = 44444
- # 配置Sink,类型为logger,输出日志到console
- a1.sinks.k1.type = logger
- # 配置Channel,类型为memory
- a1.channels.c1.type = memory
- a1.channels.c1.capacity = 1000
- a1.channels.c1.transactionCapacity = 100
- # 绑定Source、Sink和Channel的对应关系
- a1.sources.r1.channels = c1
- a1.sinks.k1.channel = c1
启动Flume agent
- bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
打开另一个终端,Telnet连接44444端口,并发送数据
- $ telnet localhost 44444
- Trying 127.0.0.1...
- Connected to localhost.localdomain (127.0.0.1).
- Escape character is '^]'.
- Hello world! <ENTER>
- OK
可看到Flume在console输出如下内容
- 12/06/19 15:32:19 INFO source.NetcatSource: Source starting
- 12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
- 12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }
原文地址:Apache Flume日志收集系统简介

Apache Flume日志收集系统简介的更多相关文章
- Flume日志收集系统架构详解--转
2017-09-06 朱洁 大数据和云计算技术 任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息.在没有分析方法之前,这些日志存储一段时间后就会被清理.随着技术的发展和 ...
- 基于Flume的美团日志收集系统(一)架构和设计
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
- 基于Flume的美团日志收集系统(一)架构和设计【转】
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
- 转:基于Flume的美团日志收集系统(一)架构和设计
美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...
- 基于Flume的美团日志收集系统 架构和设计 改进和优化
3种解决办法 https://tech.meituan.com/mt-log-system-arch.html 基于Flume的美团日志收集系统(一)架构和设计 - https://tech.meit ...
- 基于Flume的美团日志收集系统(二)改进和优化
在<基于Flume的美团日志收集系统(一)架构和设计>中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计.在本节中,我们将会讲述在实际部署和使用过程中遇到的问 ...
- 分布式日志收集系统Apache Flume的设计详细介绍
问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么 ...
- Flume -- 开源分布式日志收集系统
Flume是Cloudera提供的一个高可用的.高可靠的开源分布式海量日志收集系统,日志数据可以经过Flume流向需要存储终端目的地.这里的日志是一个统称,泛指文件.操作记录等许多数据. 一.Flum ...
- 分布式日志收集系统:Flume
Flume知识点: Event 是一行一行的数据 1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去. 2.flume里面有个核心概念,叫做agent.agent是一个java进程,运 ...
随机推荐
- I帧/P帧/B帧---术语解释
视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的. 简单地说,I帧是关键帧,属于帧内压缩.就是和AVI的压缩是一样的. P是向前搜索的意思.B ...
- Canvas globalCompositeOperation API
参考: http://www.cnblogs.com/jenry/archive/2012/02/11/2347012.html <!DOCTYPE html> <html lang ...
- 双击startup.bat启动tomcat时闪退原因及解决方案
在启动免安装tomcat时,很容易遇到双击startup.bat,启动窗口闪退而tomcat服务未启动的状况. 具体原因:tomcat在启动时,需要读取环境变量和配置信息,如果缺少Java环境,即缺少 ...
- GTK+基本图元的绘制
// main.c #include <gtk/gtk.h> static void draw_round_rectangle (cairo_t * cr, double x, doubl ...
- 都能读懂的css3 3D变形效果
css3 3D变形效果 CSS3 transform3D变形 transform的含义是:改变,使-变形:转换 三维变换使用基于二维变换的相同属性,如果您熟悉二维变换,你们发现3D变形的功能和2D变换 ...
- 用《内网穿山甲》把本地IIS中的站点共享到远程访问
前言: 因为各种原因,我们常常要把本机或局域网中搭建的站点发给远方的人访问,他有可能是测试人员.客户.前端.或领导演示,或是内部系统内部论坛临时需要在远程访问,事件变得很麻烦,要么有公网IP,要么能控 ...
- phpcms如何做企业站--> 替换首页最初操作
首先用一个静态首页的模板,通过cms进行替换做成一个有后台的 首页的替换流程首先要先把静态网页做出来,拿这个页面去替换 页面所有的文件都在这,做静态页面的文件 现在要做的是把这些文件复制一下拿到php ...
- Ansible之 Inventory 资源清单介绍
一.Inventory 库存清单文件 1.Inventory 作用 Ansible 可以在同一时间针对多个系统设施进行管理工作.它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/ ...
- 如何用js实现自适应,原来只是几行代码的事(╯‵□′)╯︵┻━┻
在javascript写下如下几行: (function (doc, win, undefined) { var docEl = doc.documentElement, ...
- 纪中集训 Day1
今天早上起来吃饭,发现纪中伙食真的是太差了!!!什么都不热,早餐的面包还好,然后就迎来了美好的早晨= = 早上做一套题,T1T2果断秒,T3一看就是noi原题,还好看过题解会写,然后就愉快的码+Deb ...