Flume官方文档的理解和配置操作

Apache Flume是一个用于高效收集、聚合和移动大量日志数据的系统,具有高可靠性和容错性。其架构基于数据流模型,包括Source、Channel和Sink。Source从外部数据源获取数据,Channel作为临时存储,Sink将数据存储到目标存储。配置文件遵循Java属性格式,代理通过shell脚本启动。本文档涵盖了Flume的配置、组件、流管理、可靠性、恢复性等方面,适用于日志数据处理和传输。
摘要由CSDN通过智能技术生成

Flume官方文档的理解和配置操作

摘要

Flume是一个分布式的,可靠的,并且具有高可用性的一个服务系统,用于高效地收集、聚合、移动一个大数量的日志文件, 它有一个基于数据流类型的简单且灵活的的架构。 由于它的容错可调 机制和许多故障转移和恢复机制,使得这个架构具有较高的容错性和健壮性。 它使用一个简单的可扩展的数据模型,可以让它在线分析应用程序。

一、概述

Apache Flume是一个分布式的、可靠的、高可用性的一个系统,用于从许多不同来源的一个集中的数据存储中高效的收集、聚合、移动一个大数据量的日志文件(分布式的海量日志的高效收集、聚合、移动/传输的一个框架),特点:简单灵活,是基于一个流式数据处理框架。
Apache Flume 不仅限于日志数据的聚合,由于数据资源是可以定制的,Flume可以用于大量的数据传输服务,包括且不限于网络层流量传输的数据,而且还可以传输社交媒体生成的数据数据, 电子邮件消息数据和几乎任何的数据源。
Apache Flume是Apache软件基金会的顶级项目。
目前发行有两个版本,0.9.x本和1.x版本。
推荐用户们使用1.x版本,以便于利用最新的架构,性能得到了改进且具有配置灵活性。

二、系统需求

1.Java运行环境(jre)1.8版本及以上
2.使用的内存足够用于配置资源
3.磁盘空间足够用于磁盘空间的配置(source5s,channels,sinks)
4.目录权限——读写权限的目录使用代理

三、 体系结构

数据流模型

这里写图片描述
一个Flume数据可以定义为一个单位的字节负载的数据流,并且可以选择字符串属性。一个Flume代理机是一个主机进程从外部源得到数据发送到目的数据源去。
一个Flume source消费数据,是从外部数据源中获取数据 例如一个web服务器,外部源按照格式发送数据到flume ,便于flume识别目标来源。例如,一个Avro flume sources可以用于接收来自Avro客户端的数据或者其他类型的flume代理机, 然后接受到后,AvroChannel发送到Avro Sink。一个类似的流可以被定义用于一个Thrift Flume sources用于接受来自Thrift客户端的数据或者客户段任何语言写好的Flume Thrift协议。一个、、当一个FLume sources接收到一个数据,就把数据储存在一个或者多个Channel中。Channael相当于被动存储这些数据知道这些数据被一个进程发送至Flume sink中去。文件通道就是一个例子,它依赖于本地稳健系统,Sink删除通道中的数据并把它们存储在想HDFS一样的存储结构中,或者将它发送到下一个flume source中等待下一个flume代理机来处理。Source和sink 异步的对channel中的数据进行操作。
互相不影响,channel被动地被处理数据。

理解:

Source:数据从哪里去。去源头读数据,写到Channel中
从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channal,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等
Channel:中间管道(内存或磁盘中)。链接Source和Sink,类似一个队列或缓冲区
channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等.
Sink:写到哪里去。从Channel拉数据,写到HDFS中,或把数据写入到下一个agent的source中。
sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.

四、复杂的流

Flume允许用户构建多重流动的数据流, 在这些流被传输到最后重点是,用户可以它进行多重的控制。 它还允许扇入 和扇出流,允许进行路线的选择以便其中一条路线出现故障。

五、可靠性

一个数据的代理是在一个通道中, 然后数据被传输到下一个代理机或者终端存储器 例如HDFS。数据仅在他们存到下一个代理机的通道或者到达终端存储器时会被当前的通道移除。这便是为何flume提供的简答的端到端交付数据,信息传输拥有可靠性。
Flume利用类似事务方法保证的传输数据的可靠性,数据源和sinks封装一个事务用于分别检索放在提供的交易通道中,这将保证数据的集合是通过可靠地点到点的流传输。在这样一个多重流传输情况下,之前传到终端存储器的sink和从hop取到的sources都有他们传输进程用来保证数据安全的存储在通道和hop当中。

六、可恢复性

数据存储在通道中,出现故障时可以随时回复,Flume提供了一个持久耐用的文件通道有本地文件系统支持,还有一个记忆通道,简单地将数据存储在记忆队列中,可以加快数据的传输但是任何一个数据遗留在通道中时代理机出现故障,数据无法恢复。

七、配置

7.1 配置一个flume

Flume代理配置存在一个本地配置文件中,这是一个遵循Java属性文件格式的文本文件,可以指定一个或者多个代理的配置位相同的配置文件,配置文件包含每个数据源的性质,说明了他们是如何连接在一起形成数据流的。

7.2配置单个组件

每个组件(source,channel,sink)有一个名称,类型,并且需要设定特定属性的类型和实例化。例如,一个Avro源需要一个主机名(或IP地址)和接受数据的端口号。一个内存通道拥有存一个最大队列的能力,一个HDFS sink需要知道系统URI,按照路径创建文件,设置文件的属性等。所有这些组件的属性都需要有Flume代理机设定。

7.3把组件联合在一起

代理机需要知道每个组件加载是如何连接并形成流。这是通过列出每一个source,sink和channel在代理机中的命名,然后具体地连接这三个组件。例如,一个来自AVro source的代理数据流命名为avroWeb 发送到 名为hdfs-clust1的HDFS sink,这次传输通过名字为file-channel的通道。配置文件将包含这些的名字组件和file-channel avroWeb作为一个公共信道提供给avroWeb源和hdfs-cluster1 sink。

7.4设置一个代理

一个代理使用shell脚本位于flume的bin目录下的名为flume-ng的文件,你需要制定具体的代理名称,配置目录,在命令行配置文件:

现在,代理开始运行source和sink中的配置属性文件

7.5一个简单的例子

这里,我们给出一个示例配置稳健,描述一个单节点flume部署,该配置允许用户生成数据和随后的日志控制台。

# 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

这个配置定义了一个单一的代理叫a1.a1源在端口44444上获取数据,一个通道在内存中缓冲数据,sink发送日志数据到控制台。配置文件名称和各个组件,然后描述了他们的类型和配置参数。给定配置文件定义的叫代理机,当一个给定的flume过程启动标志这名为代理机表明给定的配置文件可用,我们就可以允许flume了。

有了这个配置文件,我们可以启动Flume如下:

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

需要注意的是,在一个完成的配置中通常包括一个选项:–conf=. The 目录下的包括一个shell脚本flume-enc.Sh和一个潜在的log4j文件。例如,我们通过一个java option强制访问日志控制台 但是我们没有自定义环境脚本。
从一个单独的终端,我们可以通过端口44444发送flume数据

$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值