【Flume-1.8.0】Flume概要

1 Flume概述

Flume是一种分布式distributed,可靠reliable且可用available的服务,用于高效地收集,汇总和移动大量日志数据。它具有基于流式数据流的简单而灵活的架构。它有可靠性机制和许多故障转移和恢复机制,具有强大的容错性和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。 

Apache Flume 1.8.0Flume作为Apache顶级项目(TLP)的第11个版本。Apache Flume 1.8.0是可用于生产的软件。目前有两个发布代码行,版本0.9.x1.x.本文档适用于1.4.x及其以后的版本。

系统要求

Java运行时环境 - Java 1.8或更高版本。目录权限 - 代理agent使用目录的读/写权限

1Flume是一个数据收集工具,具有强大的容灾和容错能力,可用于在线分析。

2Flume的最新版本为1.8.0。可用于生产。

3Flume有两个发布的版本,一个是0.9.x,一个是1.x。推荐使用1.x版本。本文档适用于1.4.x及其以后的版本。

4Flume对系统的要求,Java要求1.8或者更高,Flume要有操作目录的读写权限。

2 Flume架构

Flume event是一个数据流单元,里面装载着byte类型的数据,这组数据的属性是可选的,可配置的。Flume agent是一个(JVM)进程,用于承载event从外部源流向下一个目标(hop)的组件。

Flume source消费由外部源(如Web服务器)传递给它的event。外部源以Flume source识别的格式向Flume发送event。例如,Avro source可用于接收来自Avro客户端或另一个agentAvro sink发送event。使用Thrift Flume Source可以定义类似的流程,以接收来自Thrift SinkFlume Thrift Rpc客户端的event。当source接收event时,它会将其存储到一个或多个channelChannel可以存储event,直到eventsink消费File channel就是一个例子HDFS sinkchannel中删除event并将event放入HDFS等外部存储库或将其转发到流中下一个agent(下一个hop)的sourceagent中的sourcesinkchannel中的event异步运行。

Flume允许用户构建多级hopevent在到达最终目的地之前通过多个agent传播。它还允许扇入(fan-in)和扇出(fan-out)流,上下文路由和备份路由(故障转移)。

这些event在每个agentchannel中进行组织。然后将event传递到流中的下一个agent或终端存储库(如HDFS)。仅当event存储在下一个agentchannel或终端存储库中后才会从channel中删除event这是Flume如何提供流的端到端可靠性原理。

Flume采用事务(transaction)来保证事件的可靠传递。这确保了该组事件可靠地在流程中从点到点传递。在多跳流情况下,来自前一个hopsink和来自下一个hopsource都以事务运行,以确保数据安全地存储在下一个hopchannel中。

这些eventchannel组织channel负责从失败中恢复Flume支持由本地文件系统支持的持久file channel。还有一个memory channel,它将event简单地存储在内存队列中,速度更快,但是当agent进程死亡时仍然留在memory channel中的任何event都无法恢复。

1Flume有三个组件,sourcechannelsink,它们合起来称为一个agent,也可以理解为一个hop。启动后的一个agent就是一个JVM进程。在同一个agent中,sourcechannelsink可以有多个。

2source可以有多种类型,收集某种类型的数据就使用对应的sourceChannelsink也是一样的。每种具体的类型有多种参数可以配置。

3Flume将数据封装为event,在channel中存储和恢复。数据(也就是Flume封装好的event)在一个agent中的流向一定是中sourcechannel,再到sink

4agent中的sourcesinkchannel中的event异步运行。

5、仅当event存储在下一个agentchannel或终端存储库中后才会从channel中删除event

6Flume采用事务(transaction)来保证event的可靠传递。

7channel负责从失败中恢复event。当channel的类型为memory channel时,Flume是无法实现容灾的。虽然memory channel的速度会更快。

3 使用

Flume agent配置文件存储在本地配置文件中。这是一个遵循Java properties文件格式的文本文件。一个或多个agent的配置文件可以在同一个配置文件目录中指定。配置文件包括agent中每个sourcechannelsink的属性,以及它们如何连接在一起形成数据流。

流中的每个组件(sourcesinkchannel)都具有特定的类型和实例的名称、类型和一组属性。例如,Avro source需要主机名(或IP地址)和端口号才能接收数据。Memory channel可以具有最大队列大小(capacity),HDFS sink需要知道文件系统URI,创建文件的路径等。组件的所有这些属性需要在属性文件中进行设置。

agent需要知道要加载的单个组件以及它们如何连接以构成流。这是通过列出agent中每个sourcesinkchannel的名称,然后为每个sourcesink指定连接channel来完成的。例如,agent通过称为File channel的文件通道将来自Avro sourceevent(称为avroWeb)传输到HDFS sink hdfs-cluster1。配置文件将包含这些组件和文件通道的名称,作为avroWeb sourcehdfs-cluster1 sink的共享通道。

代理程序使用名为flume-ngshell脚本启动,该脚本位于Flumebin目录中。需要在命令行上指定代理名称,配置目录和配置文件:

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


现在代理将开始运行在给定属性文件中配置的
sourcesink

配置示例:

如下给出了一个示例配置文件,描述单节点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

该配置定义了一个名为a1agenta1有一个侦听端口44444上的数据的source,一个缓存内存中事件数据的channel,以及一个将event数据记录到控制台的sink。配置文件命名各种组件,然后描述它们的类型和配置参数。一个给定的配置文件可能会定义多个agent, 当一个给定的Flume进程启动时,要告诉程序启动的agent的名称。

给定这个配置文件,我们可以按如下方式启动Flume

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

请注意,在完整部署中,我们通常会包含一个选项:-- conf = <conf-dir>。所述<CONF-DIR>目录将包括一个shell脚本flume-env.sh和一个log4j的属性文件。在这个例子中,我们传递一个Java选项来强制Flume将日志输出到控制台,并且我们没有自定义环境脚本。

从一个单独的终端,我们可以telnet端口44444并发送一个eventFlume

$ telnet localhost 44444

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

Hello world! <ENTER>

OK

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

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!. }


1Flume依靠配置文件启动。多个配置文件可以存放在一个配置文件目录下面。每个配置文件可以配置多个agent。每个agent需要指定sourcechannelsink,以及它们是如何绑定在一起的。每个具体的source类型的参数是不同的,根据它们的实际情况来确定,channelsink的情况也是一样的。

2Flume程序通过flume-ng这个脚本启动。启动时需要在命令行上指定代理名称,配置目录和配置文件目录。配置文件目录应该包括一个flume-env.sh和一个log4j的属性文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值