FLUME 简介+安装+简单案例

Flume日志采集系统 (flume的翻译叫水槽:它就是管道输送)

http://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.html
1.Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。
它具有基于流数据流的简单灵活的架构。
它具有可靠的可靠性机制和许多故障转移和恢复机制,具有强大的容错能力。

2.Flume原始版本为Flume-OG,经过对整体架构的重新设计,已改名为Flume-NG.
  Flume发展到现在已经不仅限于日志采集,还可以通过简单的配置收集不同数据源的海量数据并将数据准确
  高效地传输到不同的中心存储.目前Flume可以对接的主流大数据框架有Hadoop、Kafka、ElasticSearch、
  Hive、HBase等
  
3.Flume基本架构(FLume-NG)
  flume三个组件:[Source(数据源)、Channel(通道)、Sink(接收器)]==Agent(代理)



4.Flume工作原理 
从设置角度讲,Flume是一个灵活的分布式系统,提供多种不同来源高效收集、
聚合和传送大量数据到集中式数据存储的可靠且可扩展的方式。
以下是关键概念列表。理解了这些概念,就可以更好地理解Flume的架构及其工作原理:

一个event在一个agent中的传输流程参照【event在agent传输流程图.png】
Source-->Interceptor-->Selector-->Channel-->Sink Processor-->Sink-->存储中心/下一个Agent

客户端(client):生成事件并将它们发送到一个或多个代理的实体。
               如果你的应用程序内嵌了Flume代理,那么无需客户端.


事件(Event): 一条消息或者说是一条数据,具有可选头信息,在头信息中可以设置时间戳、主机名称等信息

代理(Agent):Flume的部署单位,包含source、channel、sink等组件的flume进程

源(Source):数据源,接收或者收集不同形式的数据源,从指定地点接收事件并将其放入一个或多个通道

通道(Channel):event的临时缓冲区,source先将event发送到chanel缓存等待sink拉取

接收器(Sink):主动组件,从Channel中拉取Event并将它们传送到最终目的地HDFS或流中的下一个代理Agent。

拦截器(Interceptor):可选组件,event拦截器,根据配置文件在event的header中添加时间戳、主机名称等信息

Sink Processor:event sink处理器,flume提供了故障转移处理器和负载均衡处理器

流(Flow):从事件的源头到其最终目的地之间的管道。最简单的Agent代理只有一个流.



Flume可靠性

Flume 使用事务性的方式保证传送Event整个过程的可靠性。Sink必须在Event被存入Channel后,
或者,已经被传达到下一站agent里,又或者,已经被存入外部数据目的地之后,
才能把Event从Channel中remove 掉。这样数据流里的event无论是在一个agent里还是多个
agent 之间流转都能保证可靠,因为以上的事务保证了event会被成功存储起来。
比如 Flume支持在本地保存一份文件 channel 作为备份,而memory channel 将 event存在内存 queue 里,
速度快,但丢失的话无法恢复。

3.安装:
   a.下载Flume1.6.0版本
       $>cp /mnt/hgfs/2.安装环境/download/apache-flume/apache-flume-1.6.0-bin.tar.gz  /home/crx/soft/
   b.解压至{home/crx/soft}
       $>tar -zxvf apache-flume-1.6.0-bin.tar.gz
   $>rm apache-flume-1.6.0-bin.tar.gz 
       $>ln -s apache-flume-1.6.0-bin/ flume
   c.配置环境变量
       $>cd ~
   $>gedit .bash_profile
   追加以下代码:
       #Flume install
		export FLUME_HOME=/home/crx/soft/flume
		export PATH=$FLUME_HOME/bin:$PATH
   d.安装完成!!
       查看Flume安装目录bin/下,只有flume-ng命令
       验证成功:$>flume-ng version

nameserver 8.8.8.8
案例测试:收集socket端数据,并显示到logger端

1.在linux中安装netcat工具,用户开启Socket客户端:
   a.切换至root下
      $>su root
   b.nc安装命令
      $>yum install -y nc
   c.切换至crx用户下,模拟聊天室:
      $>nc
     开启服务器端:$>nc -l 55555
     开启客户端  :$>nc localhost 55555 
	 
2.创建Agent
   编写Agent配置信息,在{FLUME_HOME/conf}目录下,新建文件:ncAgent.conf,添加以下代码:
    a1.sources = s1
	a1.channels = c1
	a1.sinks = k1

	#定义agent的source属性
	a1.sources.s1.type = netcat
	a1.sources.s1.bind = master
	a1.sources.s1.port = 55555

	#配置agent的sink属性
	a1.sinks.k1.type = logger

	#配置agent的channel的属性
	a1.channels.c1.type = memory

	a1.sources.s1.channels = c1
	a1.sinks.k1.channel = c1       #注意:a1.sinks.k1.channel后不用有s
3.开启flume进程:
   $>flume-ng agent --name a1 --conf /home/crx/soft/flume/conf/ --conf-file /home/crx/soft/flume/conf/ncAgent.conf -Dflume.root.logger=INFO,console
   或者:
   $>flume-ng agent -n a1 -c /home/crx/soft/flume/conf/ -f /home/crx/soft/flume/conf/ncAgent.conf -Dflume.root.logger=INFO,console    
4.开启nc客户端:
   $>nc master 55555
   hello world
   zhang  san
5.结果:
   在flume的会话窗口中,显示以下信息:
     Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64                hello world }
     Event: { headers:{} body: 7A 68 61 6E 67 20 73 61 6E                      zhang san }

File Channel:
a1.channels.c1.type = file
a1.channels.c1.checkpointDir = /home/crx/flumeAAA/checkpoint
a1.channels.c1.dataDirs = /home/crx/flumeAAA/data

flume的可恢复性 推荐使用FileChannel,事件持久化在本地文件系统里(性能较差)
自动生成flumeAAA文件夹

案例测试:收集socket端数据,并获取后写入到本地磁盘

netcat-fileroll.conf
1.编写agent
a1.sources=s1
a1.channels=c1
a1.sinks=k1

#定义agent的source属性
a1.sources.s1.type=netcat
a1.sources.s1.bind=master
a1.sources.s1.port=55555

#配置agent的sink属性 
#/home/crx/tmp/flume 需要事先创建好此文件夹 【mkdir】 flume
a1.sinks.k1.type=file_roll
a1.sinks.k1.sink.directory=/home/crx/tmp/flume

#每30秒滚动一次文件。指定0将禁用滚动并导致所有事件都写入单个文件
a1.sinks.k1.sink.rollInterval=0

#配置agent的channel的属性
a1.channels.c1.type=memory

a1.sources.s1.channels=c1
a1.sinks.k1.channel=c1
2.执行:
   $>flume-ng agent --name a1 --conf /home/crx/soft/flume/conf/ 
                    --conf-file /home/crx/soft/flume/conf/netcat-fileroll.conf 
		-Dflume.root.logger=INFO,console
3.开启nc客户端4个会话
   $>nc master 55555  hello word
   $>nc master 55555  hello
   $>nc master 55555  hello123
   $>nc master 55555  hello1234
4.查看采集目录
   $>cd /home/crx/tmp/flume
   $>ll
       -rw-rw-r--. 1 crx crx  0 Sep 10 14:03 1536613249150-7
   -rw-rw-r--. 1 crx crx  0 Sep 10 14:04 1536613249150-8
   -rw-rw-r--. 1 crx crx  0 Sep 10 14:04 1536613249150-9
   -rw-rw-r--. 1 crx crx  0 Sep 10 14:06 1536613569603-1

[crx@master flume0804]$ cat 1564884105308-1 
hello word
hello
hello123
hello1234

经过测试a1.sinks.k1.sink.rollInterval=10
每10秒自动生成文件,不管source是否传来数据,都会自动生成文件

案例测试:定义 一个agent 两套流(FLow)

1.实现要求:前提条件为一个Agent(代理)
   a.监控44444端口,收集的数据写入到本地磁盘{/home/crx/tmp/flume} (本地磁盘要事先创建文件)
   b.监控55555端口,收集的数据显示到logger
2.编写Agent:
  在{FLUME_HOME/conf}下新建one-agent.conf文件
a1.sources=s1 s2
a1.channels=c1 c2
a1.sinks=k1 k2

#定义agent的source属性
a1.sources.s1.type=netcat
a1.sources.s1.bind=master
a1.sources.s1.port=44444

a1.sources.s2.type=netcat
a1.sources.s2.bind=master
a1.sources.s2.port=55555

#配置agent的sink属性
a1.sinks.k1.type=file_roll
a1.sinks.k1.sink.directory=/home/crx/tmp/flume
a1.sinks.k1.sink.rollInterval=0

a1.sinks.k2.type=logger

#配置agent的channel的属性
a1.channels.c1.type=memory
a1.channels.c2.type=memory

#source-->channel-->sink
a1.sources.s1.channels=c1
a1.sinks.k1.channel=c1

#source-->channel-->sink
a1.sources.s2.channels=c2
a1.sinks.k2.channel=c2
3.开启flume-ng
   $>flume-ng agent --name a1 --conf /home/crx/soft/flume/conf/ 
                    --conf-file /home/crx/soft/flume/conf/one-agent.conf 
		-Dflume.root.logger=INFO,console
4.开启nc客户端
   $>nc master 44444
   $>nc master 55555
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值