认识Flume(一)

2019-07-03 18:08:50 浏览数 (1)

本文主要介绍【Flume的架构和使用】
目标
  • 认识了解Flume。
  • 掌握Flume基本原理。
简介

Apache Flume是一个分布式的、可靠的和可用的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源移动到集中的数据存储。

运行要求

Java运行时环境:Java 1.8或更高版本。 内存:为源、通道或接收器使用的配置提供足够的内存。 磁盘空间:为通道或接收器使用的配置提供足够的磁盘空间。 目录权限:代理使用的目录的读写权限。

架构

Flume事件定义为具有字节负载和一组可选字符串属性的数据流单元。Flume代理是一个(JVM)进程,它承载事件从外部源流向下一个目标(hop)的组件。

image.png

Flume源使用外部源(如web服务器)交付给它的事件。外部源以目标Flume源可以识别的格式向Flume发送事件。例如,Avro Flume源可以用于从Avro客户端接收Avro事件,或者从Avro接收器发送事件的流中的其他Flume代理。类似的流可以使用一个节俭水槽源来定义,以从一个节俭水槽接收事件,或者从一个节约水槽Rpc客户机接收事件,或者从节约水槽协议生成的任何语言编写的节约水槽客户机接收事件。当Flume源接收到事件时,它将进行存储。

Flume允许用户构建多个跃点流,其中事件在到达最终目的地之前经过多个代理。它还允许扇入和扇出流、上下文路由和失败跳转的备份路由(故障转移)。

基础知识
概念

Agent主要由:source,channel,sink三个组件组成. Source: 从数据发生器接收数据,并将接收的数据以Flume的event格式传递给一个或者多个通道channel,Flume提供多种数据接收的方式,比如Avro,Thrift,twitter1%等 Channel: channel是一种短暂的存储容器,它将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channal是一个完整的事务,这一点保证了数据在收发的时候的一致性. 并且它可以和任意数量的source和sink链接. 支持的类型有: JDBC channel , File System channel , Memort channel等. sink: sink将数据存储到集中存储器比如Hbase和HDFS,它从channals消费数据(events)并将其传递给目标地. 目标地可能是另一个sink,也可能HDFS,HBase.

关联关系

Agent(代理):Flume代理配置存储在本地配置文件中。这是一个遵循Java属性文件格式的文本文件。可以在同一个配置文件中指定一个或多个代理的配置。配置文件包括代理中的每个源、接收器和通道的属性,以及如何将它们连接在一起以形成数据流。

流中的每个组件(source, sink or channel)都有特定于类型和实例化的名称、类型和属性集。例如,Avro源需要主机名(或IP地址)和端口号来接收数据。内存通道可以具有最大队列大小(“容量”),而HDFS接收器需要知道文件系统URI、创建文件的路径、文件旋转的频率(“HDFS . rollinterval”)等。组件的所有这些属性都需要在宿主Flume代理的属性文件中设置。

Agent代理需要知道要加载哪些单独的组件,以及它们是如何连接的,以便组成流。这是通过列出代理中每个source、sink 和channel的名称来完成的,然后为每个sink 和source指定连接channel。例如,Agent代理通过一个名为file-channel的文件通道将事件从一个名为avroWeb的Avro源流到HDFS sink HDFS -cluster1。配置文件将包含这些组件的名称,并将文件通道作为avroWeb源和hdfs-cluster1接收器的共享通道。

Agent代理使用名为Flume -ng的shell脚本启动,该脚本位于Flume发行版的bin目录中。您需要在命令行中指定代理名称、配置目录和配置文件:

简单实例

在这里,我们给出一个配置文件示例,描述一个单节点Flume部署。此配置允许用户生成事件并随后将其记录到控制台。

代码语言:javascript复制
# 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上的数据,一个通道缓冲内存中的事件数据,还有一个接收器将事件数据记录到控制台。配置文件为各种组件命名,然后描述它们的类型和配置参数。一个给定的配置文件可以定义几个指定的代理;当启动给定的Flume进程时,将传递一个标志,告诉它要显示哪个命名代理。

启动模板:

代码语言:javascript复制
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

查看结果

代码语言:javascript复制
$ telnet localhost 44444

最初的Flume终端将在日志消息中输出事件。

应用场景

Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,所以Flume可以用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息以及几乎所有可能的数据源

最后

本人水平有限,欢迎各位建议以及指正。顺便关注一下公众号呗,会经常更新文章的哦。

0 人点赞