`

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详细安装步骤

    创建一个文件 `1.log` 并写入 `hello flume`,然后查看 Flume 的控制台日志,应当看到如下输出: ``` 2017-03-20 15:13:51,868 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO -org.apache.flume.sink....

    Flume+kafka+Storm整合

    - 使用 `telnet localhost 5858` 发送数据,如:`hello world`。 #### 三、Kafka配置详解 1. **下载Kafka:** - 使用命令 `wget ...

    flume-kafka流程

    - 将测试数据写入到Flume指定的位置,如命令`echo "helloworld" &gt; /usr/local/apache-flume-1.6.0/file`。 - 这里假设Flume有一个Collector来读取文件中的数据,并将其转发到Kafka。 5. **使用Avro客户端向Flume...

    flume-1.7.0.zip

    Flume 是 Apache 开源项目中的一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的工具。在大数据处理领域,它是一个重要的数据采集框架,尤其适用于实时数据流的采集。Flume 1.7.0 版本是该软件的一个稳定...

    flume-1.9.0.tgz

    Flume 是 Apache 开源项目中的一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的工具。在大数据处理领域,Flume 是一个至关重要的组件,尤其在日志管理和实时数据分析中扮演着核心角色。"flume-1.9.0.tgz...

    安装Flume和使用

    ### Flume的安装与使用详解 #### 一、Flume简介 Apache Flume 是一个分布式的、可靠的、高可用的服务,用于有效地收集、聚合和移动大量日志数据。Flume 支持简单灵活的配置,这使得它可以适用于各种场景中的数据...

    Flume日志采集手册.docx

    hello,flume ``` #### 三、应用案例 **1、案例描述** 本案例主要介绍如何利用Flume将数据采集并传输到Kafka服务中,然后再由Kafka进行数据的分发与消费。 **2、创建Kafka配置** 为了将数据传入Kafka,需要配置...

    04、日志收集系统Flume-flume自定义开发案例.docx

    然后,它生成并发送 10 个包含 "Hello Flume!" 数据的事件。每个事件都是通过 `sendDataToFlume` 方法发送的,该方法构建了一个 `Event` 对象,并使用 `EventBuilder` 将数据封装为 UTF-8 编码的字节。如果在发送...

    大数据采集技术-Flume监控端口实验手册.pdf

    - 使用 netcat 发送数据到 Flume 监听的端口,例如:`echo "Hello, World!" | nc -lk 44444` 4. 查看结果: - 当数据发送后,Flume 将捕获这些信息并写入 HDFS,你可以使用 HDFS 命令行工具或 Hadoop 的 Web UI ...

    大数据采集技术-Flume监控本地端口.pptx

    echo "Hello, World!" | nc localhost 44444 ``` 发送的消息将会被Flume捕获,存储在`memory-channel`中,然后由`console-sink`输出到控制台。 为了监控端口中的具体信息,你可能需要结合其他监控工具,如`tcpdump...

    快速学习-Flume 对接 Kafka

    向`/opt/module/data/flume.log`文件追加数据,例如`echo hello &gt;&gt; /opt/module/data/flume.log`,然后观察Kafka消费者是否能消费到这些新数据。 通过上述配置和操作,我们可以实现Flume从指定的日志文件中收集...

    大数据-互联网大厂面试真题附含答案01.pdf

    文档还展示了如何编写一个自定义Source,该Source生成随机字符串("Hello world" + 随机数)并将其作为事件传递给后续的Channel和Sink。开发者可以通过实现`AbstractSource`、`Configurable`和`PollableSource`接口...

    Hello-Play-Scala:is 模板应用程序展示了如何使用 angularjs、phoenix、flume 组织您的应用程序

    此模板应用程序展示了如何使用 angularjs、phoenix、flume 组织您的应用程序。 尝试一下 开发模式 进入项目根目录 活化剂 跑步 生产模式 进入项目根目录 活化剂 集会 转到目标目录并找到应用程序的胖 jar java -...

    白内障

    CISC 525 Apache Flume项目运行Flume代理源spooldir-通道文件-接收器记录器mkdir /tmp/spooldirflume-ng agent --conf-file spool-to-logger.properties --name agent1 --conf $FLUME_HOME /conf -Dflume.root....

    Spark开发环境搭建

    &lt;artifactId&gt;spark-streaming-flume_2.10 ${spark.version} &lt;groupId&gt;org.apache.spark &lt;artifactId&gt;spark-sql_2.10 ${spark.version} ``` 以上步骤完成了 Spark 开发环境的基本搭建,接下来就可以...

    Apache-Phoenix使用文档-英文1

    - Apache Flume:通过插件,Flume能够将数据流式传输到HBase,进而可以被Phoenix查询。 - Apache Kafka:Phoenix与Kafka的集成允许你将Kafka消息写入HBase,或者从HBase读取数据。 - Python Driver:Phoenix还...

    [APACHE]Apache Crunch - Getting Started.pdf

    它的发展受到Google的FlumeJava API的影响,该API用于构建基于Google自身MapReduce实现的数据管道。Crunch提供了对MapReduce的薄层抽象,其设计目的是让开发者能够有效使用MapReduce来编写快速、可靠的程序,这些...

    JAVA上百实例源码以及开源项目源代码

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

Global site tag (gtag.js) - Google Analytics