我是靠谱客的博主 甜美楼房,这篇文章主要介绍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
 

最后

以上就是甜美楼房最近收集整理的关于Flum入门必备知识的全部内容,更多相关Flum入门必备知识内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(287)

评论列表共有 0 条评论

立即
投稿
返回
顶部