导读:如想直接获知配置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官方网站):
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-in、Fan-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的流
先给几张官网的图:
大家可以按照官方用户手册来深入学习。
相关推荐
创建一个文件 `1.log` 并写入 `hello flume`,然后查看 Flume 的控制台日志,应当看到如下输出: ``` 2017-03-20 15:13:51,868 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO -org.apache.flume.sink....
- 使用 `telnet localhost 5858` 发送数据,如:`hello world`。 #### 三、Kafka配置详解 1. **下载Kafka:** - 使用命令 `wget ...
- 将测试数据写入到Flume指定的位置,如命令`echo "helloworld" > /usr/local/apache-flume-1.6.0/file`。 - 这里假设Flume有一个Collector来读取文件中的数据,并将其转发到Kafka。 5. **使用Avro客户端向Flume...
Flume 是 Apache 开源项目中的一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的工具。在大数据处理领域,它是一个重要的数据采集框架,尤其适用于实时数据流的采集。Flume 1.7.0 版本是该软件的一个稳定...
Flume 是 Apache 开源项目中的一个分布式、可靠且可用于有效收集、聚合和移动大量日志数据的工具。在大数据处理领域,Flume 是一个至关重要的组件,尤其在日志管理和实时数据分析中扮演着核心角色。"flume-1.9.0.tgz...
### Flume的安装与使用详解 #### 一、Flume简介 Apache Flume 是一个分布式的、可靠的、高可用的服务,用于有效地收集、聚合和移动大量日志数据。Flume 支持简单灵活的配置,这使得它可以适用于各种场景中的数据...
hello,flume ``` #### 三、应用案例 **1、案例描述** 本案例主要介绍如何利用Flume将数据采集并传输到Kafka服务中,然后再由Kafka进行数据的分发与消费。 **2、创建Kafka配置** 为了将数据传入Kafka,需要配置...
然后,它生成并发送 10 个包含 "Hello Flume!" 数据的事件。每个事件都是通过 `sendDataToFlume` 方法发送的,该方法构建了一个 `Event` 对象,并使用 `EventBuilder` 将数据封装为 UTF-8 编码的字节。如果在发送...
- 使用 netcat 发送数据到 Flume 监听的端口,例如:`echo "Hello, World!" | nc -lk 44444` 4. 查看结果: - 当数据发送后,Flume 将捕获这些信息并写入 HDFS,你可以使用 HDFS 命令行工具或 Hadoop 的 Web UI ...
echo "Hello, World!" | nc localhost 44444 ``` 发送的消息将会被Flume捕获,存储在`memory-channel`中,然后由`console-sink`输出到控制台。 为了监控端口中的具体信息,你可能需要结合其他监控工具,如`tcpdump...
向`/opt/module/data/flume.log`文件追加数据,例如`echo hello >> /opt/module/data/flume.log`,然后观察Kafka消费者是否能消费到这些新数据。 通过上述配置和操作,我们可以实现Flume从指定的日志文件中收集...
文档还展示了如何编写一个自定义Source,该Source生成随机字符串("Hello world" + 随机数)并将其作为事件传递给后续的Channel和Sink。开发者可以通过实现`AbstractSource`、`Configurable`和`PollableSource`接口...
此模板应用程序展示了如何使用 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....
<artifactId>spark-streaming-flume_2.10 ${spark.version} <groupId>org.apache.spark <artifactId>spark-sql_2.10 ${spark.version} ``` 以上步骤完成了 Spark 开发环境的基本搭建,接下来就可以...
- Apache Flume:通过插件,Flume能够将数据流式传输到HBase,进而可以被Phoenix查询。 - Apache Kafka:Phoenix与Kafka的集成允许你将Kafka消息写入HBase,或者从HBase读取数据。 - Python Driver:Phoenix还...
它的发展受到Google的FlumeJava API的影响,该API用于构建基于Google自身MapReduce实现的数据管道。Crunch提供了对MapReduce的薄层抽象,其设计目的是让开发者能够有效使用MapReduce来编写快速、可靠的程序,这些...
Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...