windows搭建flume:基于源码的二次开发

来源:互联网 发布:js 设置元素的属性值 编辑:程序博客网 时间:2024/06/05 21:11

windows搭建flume:基于源码的二次开发

 移除点击此处添加图片说明文字

​先说一下flume的架构,这部分快速阅读,flume架构倒是不难,容易理解。

flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集、聚集和移动,并以集中式的数据存储的系统。

flume目前是apache的一个顶级项目。


flume中的重要模型

1.flume Event:

flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。

2.flume Agent:

flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel 和 sink。

3.Source

数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。

4.Channel

数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。

5.Sink

数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标。


flume基本配置

#example.conf:单节点Flume配置

#命名Agenta1的组件

a1.sources=r1

a1.sinks=k1

a1.channels=c1


#描述/配置Source

a1.sources.r1.type=netcat

a1.sources.r1.bind=0.0.0.0

a1.sources.r1.port=44444


#描述Sink

a1.sinks.k1.type=logger


#描述内存Channel

a1.channels.c1.type=memory

a1.channels.c1.capacity=1000

a1.channels.c1.transactionCapacity=100


#为Channle绑定Source和Sink

a1.sources.r1.channels=c1

a1.sinks.k1.channel=c1


 现在介绍几种比较重要的Source 

1.    Avro Source

监听AVRO端口来接受来自外部AVRO客户端的事件流。利用Avro Source可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过flume提供的Avro客户端发送的日志信息。

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source a1.sources.r1.type = avro a1.sources.r1.bind = 0.0.0.0 a1.sources.r1.port = 44444

2.    Spooling Directory Source

这个Source允许你将将要收集的数据放置到"自动搜集"目录中。这个Source将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。

要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则flume会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则flume会报错。

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source a1.sources.r1.type = spooldir a1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata

3.    NetCat Source

一个NetCat Source用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。

4.    HTTP Source

HTTP Source接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。

该Source需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口,该处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。

从一个HTTP请求中得到的事件将在一个事务中提交到通道中。因此允许像文件通道那样对通道提高效率。

如果处理器抛出一个异常,Source将会返回一个400的HTTP状态码。

如果通道已满,无法再将Event加入Channel,则Source返回503的HTTP状态码,表示暂时不可用。

编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:

#描述/配置Source a1.sources.r1.type = http a1.sources.r1.port = 66666

好的,我们引入svn代码,解决maven依赖。

 移除点击此处添加图片说明文字

​用阿里云的中央仓库:

 移除点击此处添加图片说明文字

​然后等待maven下载好的同时,分析导致flume数据丢失的环节,因为已经查看了flume的报错,得知两个原因可能导致:

1、flume报错超时timeout

2.因为一个文件输入超过了最大值,直接break了。

 

​那现在就好玩了,恶心的是这种当时开发完了很爽的,结果留下了坑的,没办法痛苦的去读代码,

 移除点击此处添加图片说明文字

​在这里,对了,这里有很多类任然在报错,不用着急,maven正在引入依赖jar包,稍等会儿即可。

这样,等了很久,也没见好转,这样,也不浪费时间了,自己搭建一个。windows版本的吧,容易调试。

首先环境变量不用多说了,其次:

开始下载安装和配置:

(1)官网:http://archive.apache.org/dist/flume/   下载:apache-flume-1.6.0-bin.tar.gz

(2)在合适的位置解压

(3)参照官网的user guide配置:

  英文指南:http://flume.apache.org/releases/content/1.6.0/FlumeUserGuide.html

  中文指南:http://www.jianshu.com/p/41de9a715273

安装的时候,报错:

 移除点击此处添加图片说明文字

​调整一下example.conf

输出日志如下:

 移除点击此处添加图片说明文字

​说明flume启动成功,windows的flume已经可以用了

将example.conf粘贴出来:

a1.sources = r1

a1.sinks = k1

a1.channels = c1


# Describe/configure the source

a1.sources.r1.type = exec

a1.sources.r1.shell = /bin/bash -c

a1.sources.r1.channels = c1

a1.sources.r1.command = tail -F /opt/apps/logs/tail4.log



# Use a channel which buffers events in memory

a1.channels.c1.type = memory

a1.channels.c1.capacity = 1000

a1.channels.c1.transactionCapacity = 100


# sink

a1.sinks.k1.type = file_roll

a1.sinks.k1.channel = c1

#a1.sinks.k1.sink.rollInterval=0

a1.sinks.k1.sink.directory = /opt/apps/tmp


bat脚本代码粘贴

@echo off

title=flume搭建

mode con cols=80 lines=40

COLOR 3f

echo ------------------------------------------

cd F:\flume\flume-code\apache-flume-1.6.0-bin\bin

echo flume-ng.cmd  agent  -conf  F:\flume\flume-code\apache-flume-1.6.0-bin\conf  -conf-file  F:\flume\flume-code\apache-flume-1.6.0-bin\conf example.conf  -name  a1

flume-ng.cmd agent --conf ..\conf --conf-file ..\conf\example.conf --name a1

pause


接下来准备down源码了,我们需要开发

原创粉丝点击