flume

作者: 利伊奥克儿 | 来源:发表于2019-07-17 20:57 被阅读0次

本文只是简单介绍Flume,主要目的是想知道Flume可以做什么,内容主要来源官网

概述

Apache Flume是一个分布式的、可靠的、可用的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源转移到集中的数据存储中。
Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,Flume可以用来传输大量的事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息以及几乎所有可能的数据源。


数据流程模型

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

Flume.png

Flume源使用外部源(如web服务器)交付给它的事件。外部源以目标Flume源可识别的格式向Flume发送事件。
例如,Avro Flume源可用于从Avro clients 或流中的其他由Avro sink发送事件其他Flume agents 中接收Avro events。
当Flume源接收到一个事件时,它将其存储到一个或多个channels中。channel是一个被动存储,它保存事件,直到它 被Flume sink消费为止。
比如 file channel ,它由本地文件系统支持。接收器将事件从通道中移除,并将其放入外部存储库中,如HDFS(通过Flume HDFS sink)或将其转发到流中的下一个Flume agents(下一跳)的Flume源。

给定代理中的 source 和 sink 与 channel 中暂存的事件异步运行。


复杂流

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


可靠性

事件在每个agent上的一个通道中暂存,然后将事件交付到流中的下一个代理或终端存储库(如HDFS)。
只有在事件存储在next代理的通道或终端存储库中之后,才会从通道中删除它们。
这就是Flume中的单跳消息传递语义如何提供流的端到端可靠性。

Flume使用事务方法来保证事件的可靠交付。

sources 和sinks 分别封装在事务中,存储/检索由通道提供的事务放置或提供的事件。
这确保了事件集在流中的点与点之间可靠地传递。
对于多跳流,来自上一跳的sink 和来自下一跳的source 都运行它们的事务,以确保数据安全地存储在下一跳的channel 中。


可恢复性

事件在channel中暂存,channel负责管理故障恢复。

Flume支持由本地文件系统支持的持久 file channel 。还有一个 memory channel,它简单地将事件存储在内存队列中,速度更快,但是当代理进程死亡时,仍然留在 memory channel 中的任何事件都无法恢复。


设置

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

配置单个组件

流中的每个组件(源、接收器或通道)都有一个名称、类型和一组特定于类型和实例化的属性。

例如,Avro source 需要hostname (or IP address)和port 来接收数据。
memory channel 可以有最大队列大小(capacity)
HDFS sink 需要知道文件系统URI、创建文件的路径、文件旋转的频率(hdfs.rollInterval)等

组件的所有这些属性都需要在宿主Flume agent的属性文件中设置。


组合组件

为了组成流,代理需要知道要加载哪些单独的组件以及它们是如何连接的。
这可以通过列出代理中的每个源、接收器和通道的名称,然后为每个接收器和源指定连接通道来实现。

例如,agent通过名为file-channel的文件通道将事件从名为 avroWeb 的Avro源流到HDFS sink hdfs-cluster1
配置文件将包含这些组件的名称,并将文件通道作为 avroWeb 源和hdfs-cluster1接收器的共享通道。


启动agent

代理使用名为Flume -ng 的shell脚本启动。

该脚本位于Flume发行版的bin目录中。

需要在命令行上指定代理名称、配置目录和配置文件

$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template

代理将开始运行在给定属性文件中配置的source 和sinks 。


简单例子

监听 localhost 4444 端口,在flume 控制台输出监控结果

创建配置文件
[root@develop-01 flume]# vim flume-telnet-logger.conf
#输入以下内容
# Name the components on this agent
# a1 表示agent名称
a1.sources = r1 # r1 表示 a1 的输入源
a1.sinks = k1 # k1 表示 a1 的输出目的
a1.channels = c1 # c1 表示 a1 的缓冲区

# Describe/configure the source 
a1.sources.r1.type = netcat # 表示 a1 的输入源 类型为netcat 端口
a1.sources.r1.bind = localhost # 表示 a1 的输入源监听 ip
a1.sources.r1.port = 44444 # 表示 a1 的输入源监听的端口

# Describe the sink
a1.sinks.k1.type = logger  # 表示 a1 的输出目的是控制台 logger 类型

# Use a channel which buffers events in memory
a1.channels.c1.type = memory # 表示 a1 的 channel 类型是 memory
a1.channels.c1.capacity = 1000 # 表示 a1 的 channel 容量 1000 envent
a1.channels.c1.transactionCapacity = 100 # 表示 a1 的 channel 收集了 100 个event 才提交

# Bind the source and sink to the channel
a1.sources.r1.channels = c1 # 表示将 r1, c1连接起来
a1.sinks.k1.channel = c1 # 表示将 k1, c1连接起来
给flume-telnet-logger.conf执行权限
[root@develop-01 flume]# chmod 755 flume-telnet-logger.conf
启动Flume
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

注意,在完整的部署中,我们通常会包含一个额外的选项:——conf=<conf-dir>。<conf-dir>目录将包含一个shell脚本flume-env.sh,并可能包含一个log4j属性文件。在本例中,我们传递了一个Java选项来强制Flume登录到控制台,并且没有自定义环境脚本。

telnet 44444 端口、发送信息
[root@develop-01 flume-ng]# telnet localhost 44444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
lillcol
OK
zhetian
OK
20190717
OK
输出结果
19/07/17 16:06:13 INFO source.NetcatSource: Source starting
19/07/17 16:06:13 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
19/07/17 16:06:29 INFO sink.LoggerSink: Event: { headers:{} body: 6C 69 6C 6C 63 6F 6C 0D                         lillcol. }
19/07/17 16:07:40 INFO sink.LoggerSink: Event: { headers:{} body: 7A 68 65 74 69 61 6E 0D                         zhetian. }
19/07/17 16:08:02 INFO sink.LoggerSink: Event: { headers:{} body: 32 30 31 39 30 37 31 37 0D                      20190717. }
监控结果.png

后续可能会作为数据采集工具使用,如有机会再更新

相关文章

  • Flume01

    Flume架构组成 Flume 负载均衡 Flume Agent内部原理 启动 Flume 监听

  • Flume

    总结 一、Flume的定义 1、flume的优势 2、flume的组成 3、flume的架构 二、 flume部署...

  • 玩转大数据计算之Flume

    Flume版本:我们使用Flume最新的版本:Flume NG 1.7.0 Flume架构Flume是一个分布式的...

  • Flume 入门

    一:Flume是什么: 二:特点: 三:Flume版本介绍 四:Flume NG基本架构 五:Flume NG核心...

  • flume的部署和测试

    1 flume 安装 flume下载:http://flume.apache.org/download.htmlf...

  • 091-BigData-19Flume与Flume之间数据传递

    上一篇:090-BigData-18Flume Flume与Flume之间数据传递 一、单Flume多Channe...

  • java大数据之flume

    一、Flume简介 1.1 Flume的位置 1.2 Flume是什么 (1)Flume提供一种分布式的,可靠地,...

  • Flume(一)概述

    Flume图标 Flume图标 Flume定义 Apache Flume是一个分布式,可靠且可用的系统,用于有效地...

  • Flume pull方式和push方式整合

    Pull方式 Flume Agent 编写 启动Flume Push方式 Flume Agent的编写 启动flu...

  • 4.Flume1.9安装

    1 Flume安装部署 1.1 安装地址 (1) Flume官网地址:http://flume.apache.or...

网友评论

    本文标题:flume

    本文链接:https://www.haomeiwen.com/subject/sjthlctx.html