`

Hello~ Flume

阅读更多

导读:如想直接获知配置agent的方法,请阅读Setting up an agent小节。

 

Overview

概述

Apache Flume是一个高可靠、高可用的分布式的海量日志收集、聚合、传输系统。它可以从不同的日志源采集数据并集中存储。

 

Flume也算是Hadoop生态系统的一部分,源于Cloudera,目前是Apache基金会的顶级项目之一。Flume有两条产品线,0.9.x版本和1.x版本。本文主要介绍Flume 1.3.0,即"NG"产品线上的最新稳定版。(BTW,Flume是Apache 2.0  License)

 

Resource

资源

Architecutre

架构

 

数据流模型

Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink和Channel三大组件构成,如下图(图片摘自Flume官方网站):

 

Agent component diagram

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

 

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

 

如果你以为Flume就这些能耐那就大错特错了。Flume支持用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-inFan-out、Contextual Routing、Backup Routes。

 

高可靠性

作为生产环境运行的软件,高可靠性是必须的。

从单agent来看,Flume使用基于事务的数据传递方式来保证事件传递的可靠性。Source和Sink被封装进一个事务。事件被存放在Channel中直到该事件被处理,Channel中的事件才会被移除。这是Flume提供的点到点的可靠机制。

 

从多级流来看,前一个agent的sink和后一个agent的source同样有它们的事务来保障数据的可靠性。

 

可恢复性

 还是靠Channel。推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)。

 

概念到此为止,下面开始实战。

 

 

Setting up an agent

Agent需要知道哪些组件将被启用,组件如何连接来构成数据流。用户只需要简单地提供一个配置文件来告诉agent该如何去做即可。

 

例子:事件源于一个netcat source,使用内存Channel,最后使用logger Sink把日志输出到控制台上。(例子源于Flume官方文档,请准备好Linux环境)

 

Agent是用一个名为flume-ng的脚本来启动的:

Flume 1.3:

 

$ bin/flume-ng agent -n $agent_name -c conf -f $property_file_path

 

 

Flume 1.2和之前版本:

 

$ bin/flume-ng node -c conf -f $property_file_path -n $agent_name
 

 

$agent_name:  agent的名字,随便给个名吧,注意和property文件里agent名一致

$property_file_path: 配置文件路径。

 

下面给出配置文件。(新建一个文件example.conf,粘贴以下内容,并保存)

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

 

该配置文件中agent的名字是a1,所以修改启动命令:

$ bin/flume-ng agent --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

 1.2及更低版本的用户,请把命令中的agent改为node。

 

 接着速速启动Flume agent吧。启动前确保44444端口没有被占用。

 

启动成功后,使用telnet向Agent发送日志:

$ telnet localhost 44444

 会看到如下日志:

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.

 输入你的日志内容,比如:Hello world!回车发送。

 得到如下日志,说明你已经成功发送日志:

$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello world! <ENTER>
OK

 

在Flume agent的控制台里你可以看到如下信息:

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!. }

 

至此,恭喜你!一个最简单的Flume agent已经正常工作了!

 

 

Setting multi-agent flow

设置多agent的流

 

先给几张官网的图:

Two agents communicating over Avro RPC

 

A fan-in flow using Avro RPC to consolidate events in one place

 

 大家可以按照官方用户手册来深入学习。

 

 

 

 

分享到:
评论

相关推荐

    flume-ng安装

    Flume-NG 安装与配置指南 Flume-NG 是一个分布式日志收集系统,能够从各种数据源中实时采集数据,并将其传输到集中式存储系统中。本文将指导您完成 Flume-NG 的安装和基本配置。 安装 Flume-NG 1. 先决条件:...

    Flume1.6.0入门:安装、部署、及flume的案例

    Flume1.6.0入门:安装、部署、及flume的案例

    flume自学文档.pdf

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...

    Flume构建高可用、可扩展的海量日志采集系统

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...

    尚硅谷大数据技术之Flume

    尚硅谷大数据技术之Flume

    让你快速认识flume及安装和使用flume1 5传输数据 日志 到hadoop2 2 文档

    让你快速认识flume及安装和使用flume1 5传输数据 日志 到hadoop2 2 中文文档 认识 flume 1 flume 是什么 这里简单介绍一下 它是 Cloudera 的一个产品 2 flume 是干什么的 收集日志的 3 flume 如何搜集日志 我们把...

    apache-flume-1.8.0

    flume官网下载太慢,请从这里下载,次文件是官方网站的1.8版本,也就是支持jdk1.8的,不支持jdk1.7,如果要支持jdk1.7的,请下载我的资源里面也有,flume1.7,

    Flume集群环境搭建,flume监控

    flume集群环境搭建,详细讲解,图文并茂,包括flume信息监控和众多文章链接

    flume支持RabbitMQ插件

    flume支持RabbitMQ插件

    flume-ng-elasticsearch6-sink.zip

    flume1.9采集数据入存入elasticsearch6.2.4,flume1.9本身只支持低版本的elasticsearch,基于apache-flume-1.9.0-src的flume-ng-sinks/flume-ng-elasticsearch-sink源码修改,支持es6.2.4,打的包,直接替换flume/...

    数据采集之Flume.xmind

    Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具 Apache Flume是Apache软件基金会(ASF)的顶级项目 Event是Flume定义的一个数据流传输的最小单元。...

    Flume+kafka+Storm整合

    Flume+kafka+Storm整合 示例简介: 以下为三个组建整合,这里只做操作也演示结果,原理性方面大家多学习基础。 流程顺序是flume获取telnet数据,将接收到的数据发送至kafak,kafka作为Storm的spout,Storm进行有向无...

    47_Flume、Logstash、Filebeat调研报告

    基于flume+kafka+实时计算引擎(storm,spark,flink)的实时计算框架目前是比较火的一个分支,在实时数据采集组件中flume扮演着极为重要角色,logtash是ELK的重要组件部分,filebeat也是一个实时采集工具;

    springboot_log4j2_flume

    Log4j直接发送数据到Flume + Kafka (方式一) 通过flume收集系统日记, 收集的方式通常采用以下. 系统logs直接发送给flume系统, 本文主要记录种方式进行说明. 文章链接,请看:...

    flume-ftp-source 相关jar包

    由于flume官方并未提供ftp,source的支持; 因此想使用ftp文件服务器的资源作为数据的来源就需要自定义ftpsource,根据github:https://github.com/keedio/flume-ftp-source,提示下载相关jar,再此作为记录。

    Flume 中文官方文档PDf

    Flume官方文档中文翻译版,爬取版,PDF版,原文 PDF。

    flume-ng-1.6.0-cdh5.13.2

    CDH版本的flume Flume是Cloudera提供的一个高可用的,高可靠...当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng。由于Flume-ng经过重大重构,与Flume-og有很大不同,使用时请注意区分。

    Flume-ng资料合集

    Flume NG是Cloudera提供的一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。由原来的Flume OG到现在的Flume NG,进行了架构重构,...

    flume 1.6.0配置文件样例

    kafka对接flume,flume对接elasticSearch,flume配置样例

    实时大数据采集框架Flume详解(视频+课件+代码+工具)

    01_Flume的介绍及其架构组成 02_Flume的安装部署 03_Flume的测试运行 04_Flume中配置使用file channel及HDFS sink 05_Flume中配置HDFS文件生成大小及时间分区 06_Flume中配置Spooling Dir的使用 07_Flume中...

Global site tag (gtag.js) - Google Analytics