Flum入门必备知识

1.flume概念
flume是分布式的,可靠的,高可用的,用于对不同来源的大量的日志数据进行有效收集、聚集和移动,并以集中式的数据存储的系统。
flume目前是apache的一个顶级项目。
flume需要java运行环境,要求java1.6以上,推荐java1.7.
将下载好的flume安装包解压到指定目录即可。
2.flume中的重要模型
2.1.1.flume Event:
flume 事件,被定义为一个具有有效荷载的字节数据流和可选的字符串属性集。
2.1.2.flume Agent:
flume 代理,是一个进程承载从外部源事件流到下一个目的地的过程。包含source channel 和 sink。
2.1.3.Source
数据源,消耗外部传递给他的事件,外部源将数据按照flume Source 能识别的格式将Flume 事件发送给flume Source。
2.1.4.Channel
数据通道,是一个被动的存储,用来保持事件,直到由一个flume Sink消耗。
2.1.5.Sink
数据汇聚点,代表外部数据存放位置。发送flume event到指定的外部目标。
2.2.            flume 流动模型
2.3.            flume 的特点
2.3.1.    复杂流动性
Flume 允许用户进行多级流动到最终目的地,也允许扇出流(一到多)、扇入流 ( 多到一 ) 的、故障转移和失败处理。
2.3.2.    可靠性
事务性的数据传递,保证了数据的可靠性。
2.3.3.    可恢复性
通道可以以内存或文件的方式实现,内存更快,但是不可恢复,而文件虽然比较慢但提供了可恢复性。
      入门案例
 
1.首先编写一个配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#example.conf:单节点Flume配置
#命名Agent a1的组件
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
 2.通过flume的工具启动agent
1 $ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
 3、发送数据
windows中通过 telnet命令连接 flume所在机器的 44444端口发送数据。
4.       Source 详解
现在介绍几种比较重要的Source
4.1.      Avro Source
监听 AVRO 端口来接受来自外部 AVRO 客户端的事件流。利用 Avro Source 可以实现多级流动、扇出流、扇入流等效果。另外也可以接受通过 flume 提供的 Avro 客户端发送的日志信息。
4.1.1.     Avro Source 属性说明
!channels     
!type       类型名称, "AVRO"
!bind       需要监听的主机名或 IP
!port       要监听的端口
threads         工作线程最大线程数
selector.type     
selector.*     
interceptors       空格分隔的拦截器列表
interceptors.*        
compression-type  none    压缩类型,可以是“ none ”或“ default ”,这个值必须和 AvroSource 的压缩格式匹配
sslfalse   是否启用 ssl 加密,如果启用还需要配置一个“ keystore ”和一个“ keystore-password ”。
keystore        SSL 提供的 java 密钥文件所在路径。
keystore-password     SSL 提供的 java 密钥文件   密码。
keystore-typeJKS 密钥库类型可以是“ JKS ”或“ PKCS12 ”。
exclude-protocolsSSLv3   空格分隔开的列表,用来指定在 SSL / TLS 协议中排除。 SSLv3 将总是被排除除了所指定的协议。
ipFilter   false   如果需要为 netty 开启 ip 过滤,将此项设置为 true
ipFilterRules     定义 netty ip 过滤设置表达式规则
 
案例:
编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
4
#描述/配置Source
a1.sources.r1.type = avro
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444
  启动 flume
    ./flume-ng agent --conf ../conf --conf-file ../conf/template2.conf --name a1 -Dflume.root.logger=INFO,console
 通过 flume 提供的 avro 客户端向指定机器指定端口发送日志信息:
    ./flume-ng avro-client --conf ../conf --host 0.0.0.0 --port 44444 --filename ../mydata/log1.txt
会发现确实收集到日志
4.2.      Spooling Directory Source
这个 Source 允许你将将要收集的数据放置到 " 自动搜集 " 目录中。这个 Source 将监视该目录,并将解析新文件的出现。事件处理逻辑是可插拔的,当一个文件被完全读入通道,它会被重命名或可选的直接删除。
要注意的是,放置到自动搜集目录下的文件不能修改,如果修改,则 flume 会报错。另外,也不能产生重名的文件,如果有重名的文件被放置进来,则 flume 会报错。
属性说明:(由于比较长 这里只给出了必须给出的属性,全部属性请参考官方文档):
!channels     
!type       类型,需要指定为 "spooldir"
!spoolDir       读取文件的路径,即 " 搜集目录 "
fileSuffix.COMPLETED 对处理完成的文件追加的后缀
案例:
编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
#描述/配置Source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir=/home/park/work/apache-flume-1.6.0-bin/mydata
  启动 flume
    ./flume-ng agent --conf ../conf --conf-file ../conf/template4.conf --name a1 -Dflume.root.logger=INFO,console
 向指定目录中传输文件,发现 flume收集到了该文件,将文件中的每一行都作为日志来处理
4.3.      NetCat Source
一个 NetCat Source 用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。
4.3.1.     NetCat Source 属性说明
channels   
type     类型名称,需要被设置为 "netcat"
bind     指定要绑定到的 ip 或主机名。
port     指定要绑定到的端口号
max-line-length   512 单行最大字节数
案例:上面完整的例子即是
4.4.      HTTP Source
HTTP Source 接受 HTTP GET POST 请求作为 Flume 的事件 , 其中 GET 方式应该只用于试验。
Source 需要提供一个可插拔的 " 处理器 " 来将请求转换为事件对象,这个处理器必须实现 HTTPSourceHandler 接口,该处理器接受一个  HttpServletRequest 对象,并返回一个 Flume Envent 对象集合。
从一个 HTTP 请求中得到的事件将在一个事务中提交到通道中。因此允许像文件通道那样对通道提高效率。
如果处理器抛出一个异常, Source 将会返回一个 400 HTTP 状态码。
如果通道已满,无法再将 Event 加入 Channel ,则 Source 返回 503 HTTP 状态码,表示暂时不可用。
4.4.1.     HTTP Source 属性说明
type     类型,必须为 "HTTP"
port     监听的端口
bind   0.0.0.0     监听的主机名或 ip
handler      org.apache.flume.source.http.JSONHandler 处理器类,需要实现 HTTPSourceHandler 接口
handler.*       处理器的配置参数
selector.type
selector.*   
interceptors     
interceptors.*        
enableSSL  false   是否开启 SSL, 如果需要设置为 true 。注意, HTTP 不支持 SSLv3
excludeProtocols  SSLv3   空格分隔的要排除的 SSL/TLS 协议。 SSLv3 总是被排除的。
keystore       密钥库文件所在位置。
keystorePassword Keystore  密钥库密码
案例:
编写配置文件  修改上面给出的配置文件,除了Source部分配置不同,其余部分都一样。不同的地方如下:
1
2
3
#描述/配置Source
a1.sources.r1.type = http
a1.sources.r1.port = 66666
  启动 flume:
    ./flume-ng agent --conf ../conf --conf-file ../conf/template6.conf --name a1 -Dflume.root.logger=INFO,console
 通过命令发送 HTTP 请求到指定端口:
    curl -X POST -d '[{ "headers" :{"a" : "a1","b" : "b1"},"body" : "hello~http~flume~"}]' http://0.0.0.0:6666
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值