source学习网址:

http://flume.apache.org/FlumeUserGuide.html

一、Avro 类型的Source

监听Avro 端口来接收外部avro客户端的事件流。和netcat不同的是,avro-source接收到的是经过avro序列化后的数据,然后反序列化数据继续传输。所以,如果是avro-source的话,源数据必须是经过avro序列化后的数据。而netcat接收的是字符串格式。

利用Avro source可以实现多级流动、扇出流、扇入流等效果

另外,也可以接收通过flume提供的avro客户端发送的日志信息。

Avro Source可配选项说明

实现步骤:

1.修改配置文件,source的type属性为avro

2.根据指定的配置文件启动flume

格式代码,template-avro.conf为例子:

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.channels=c1
  4. a1.sinks=s1
  5.  
  6. #描述/配置a1的source1
  7. a1.sources.r1.type=avro
  8. a1.sources.r1.bind=0.0.0.0
  9. a1.sources.r1.port=
  10.  
  11. #描述sink
  12. a1.sinks.s1.type=logger
  13.  
  14. #描述内存channel
  15. a1.channels.c1.type=memory
  16. a1.channels.c1.capacity=
  17. a1.channels.c1.transactionCapacity=
  18.  
  19. #位channel 绑定 source和sink
  20. a1.sources.r1.channels=c1
  21. a1.sinks.s1.channel=c1

3.执行启动指令,如果出现如下提示,证明启动成功

进入到bin目录执行指令:

./flume-ng agent --conf ../conf --conf-file ../conf/template-avro.conf --name a1 -Dflume.root.logger=INFO,console

4.创建文件

在flume安装目录下创建文件夹mydata,并在文件夹里面创建文件 1.txt,并填入内容。

5.执行agent-avro客户端指令:

./flume-ng avro-client -H 0.0.0.0 -p 44444 -F ../mydata/1.txt -c ../conf/

(注:可以通过执行:./flume-ng help 来查看指令)

二、Exec类型的Source

可以将命令产生的输出作为源

Exec Source 可配置选项说明

实现步骤:

1.修改配置文件,source的type属性为avro

配置代码:

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.channels=c1
  4. a1.sinks=s1
  5.  
  6. #描述/配置a1的source1
  7. a1.sources.r1.type=exec
  8. a1.sources.r1.command=ping 192.168.234.163
  9.  
  10. #描述sink
  11. a1.sinks.s1.type=logger
  12.  
  13. #描述内存channel
  14. a1.channels.c1.type=memory
  15. a1.channels.c1.capacity=
  16. a1.channels.c1.transactionCapacity=
  17.  
  18. #位channel 绑定 source和sink
  19. a1.sources.r1.channels=c1
  20. a1.sinks.s1.channel=c1

2.进入到bin目录执行指令:

./flume-ng agent --conf ../conf --conf-file ../conf/template-exec.conf --name a1 -Dflume.root.logger=INFO,console

结果为ping 当前主机返回的结果(也可以尝试其他的linux指令,比如 cat  1.txt  查看文件内容)

三、Spooling Directory类型的 Source

将指定的文件加入到“自动搜集”目录中。flume会持续监听这个目录,把文件当做source来处理。注意:一旦文件被放到“自动收集”目录中后,便不能修改,如果修改,flume会报错。此外,也不能有重名的文件,如果有,flume也会报错。

实现步骤:

1.配置示例:

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.channels=c1
  4. a1.sinks=s1
  5.  
  6. #描述/配置a1的source1
  7. a1.sources.r1.type=spooldir
  8. a1.sources.r1.spoolDir=/home/work/data
  9.  
  10. #描述sink
  11. a1.sinks.s1.type=logger
  12.  
  13. #描述内存channel
  14. a1.channels.c1.type=memory
  15. a1.channels.c1.capacity=
  16. a1.channels.c1.transactionCapacity=
  17.  
  18. #位channel 绑定 source和sink
  19. a1.sources.r1.channels=c1
  20. a1.sinks.s1.channel=c1

2.创建相关的文件夹

3.根据指定的配置文件,启动flume

./flume-ng agent -n a1 -c ../conf -f ../conf/spooling.conf  -Dflume.root.logger=INFO,console

出现下图,证明flume正在监听指定的文件目录:

4.向指定的文件目录下传送一个日志文件,发现flume的控制台打印相关的信息。

此外,会发现被处理的文件,会追加一个后缀:completed,表示已处理完。(重名文件包括已加后缀的文件)

四、NetCat Source

一个NetCat Source用来监听一个指定端口,并接收监听到的数据。

配置示例:

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.channels=c1
  4. a1.sinks=s1
  5.  
  6. #描述/配置a1的r1
  7. a1.sources.r1.type=netcat
  8. a1.sources.r1.bind=0.0.0.0
  9. a1.sources.r1.port=
  10.  
  11. #描述a1的s1
  12. a1.sinks.s1.type=logger
  13.  
  14. #描述a1的c1
  15. a1.channels.c1.type=memory
  16. a1.channels.c1.capacity=
  17. a1.channels.c1.transactionCapacity=
  18.  
  19. #位channel 绑定 source和sink
  20. a1.sources.r1.channels=c1
  21. a1.sinks.s1.channel=c1

五、Sequence Generator Source --序列发生源

一个简单的序列发生器,不断的产生事件,值是从0开始每次递增1。主要用来测试。

可配置选项:

配置示例

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.sinks=s1
  4. a1.channels=c1
  5.  
  6. #描述/配置a1的source1
  7. a1.sources.r1.type=seq
  8.  
  9. #描述sink
  10. a1.sinks.s1.type=logger
  11.  
  12. #描述内存channel
  13. a1.channels.c1.type=memory
  14. a1.channels.c1.capacity=
  15. a1.channels.c1.transactionCapacity=
  16.  
  17. #位channel 绑定 source和sink
  18. a1.sources.r1.channels=c1
  19. a1.sinks.s1.channel=c1

六、HTTP source

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

如果想让flume正确解析Http协议信息,比如解析出请求头、请求体等信息,需要提供一个可插拔的"处理器"来将请求转换为事件对象,这个处理器必须实现HTTPSourceHandler接口。

这个处理器接受一个 HttpServletRequest对象,并返回一个Flume Envent对象集合。

flume提供了一些常用的Handler(处理器):

JSONHandler

可以处理JSON格式的数据,并支持UTF-8 UTF-16 UTF-32字符集

该handler接受Evnet数组,并根据请求头中指定的编码将其转换为Flume Event

如果没有指定编码,默认编码为UTF-8.

JSON格式如下:

  1. [{
  2.  
  3. "headers" : {
  4.  
  5. "timestamp" : "",
  6.  
  7. "host" : "random_host.example.com"
  8.  
  9. },
  10.  
  11. "body" : "random_body"
  12.  
  13. },
  14.  
  15. {
  16.  
  17. "headers" : {
  18.  
  19. "namenode" : "namenode.example.com",
  20.  
  21. "datanode" : "random_datanode.example.com"
  22.  
  23. },
  24.  
  25. "body" : "really_random_body"
  26.  
  27. }]

BlobHandler

BlobHandler是一种将请求中上传文件信息转化为event的处理器。

参数说明,加!为必须属性:

!handler        –        The FQCN of this class: org.apache.flume.sink.solr.morphline.BlobHandler

handler.maxBlobLength        100000000        The maximum number of bytes to read and buffer for a given request

配置示例:

  1. #配置Agent a1 的组件
  2. a1.sources=r1
  3. a1.sinks=s1
  4. a1.channels=c1
  5.  
  6. #描述/配置a1的source1
  7. a1.sources.r1.type=http
  8. a1.sources.r1.port=
  9.  
  10. #描述sink
  11. a1.sinks.s1.type=logger
  12.  
  13. #描述内存channel
  14. a1.channels.c1.type=memory
  15. a1.channels.c1.capacity=
  16. a1.channels.c1.transactionCapacity=
  17.  
  18. #位channel 绑定 source和sink
  19. a1.sources.r1.channels=c1
  20. a1.sinks.s1.channel=c1

2.执行启动命令

3.执行curl 命令,模拟一次http的Post请求

curl -X POST -d '[{"headers":{"a":"a1"},"body":"hello 123"}]'  http://0.0.0.0:8888

注:这种格式是固定的,因为我们用的是flume自身提供的Json格式的Handler。此外,需要包含header 和body两关键字,这样,handler在解析时才能拿到对应的数据

Flume的Source的更多相关文章

  1. 把Flume的Source设置为 Spooling directory source

    把Flume的Source设置为 Spooling directory source,在设定的目录下放置需要读取的文件,一些文件在读取过程中会报错. 文件格式和报错如下: 实验一 读取汉子和“:&qu ...

  2. flume http source示例讲解

    一.介绍 flume自带的Http Source可以通过Http Post接收事件. 场景:对于有些应用程序环境,它可能不能部署Flume SDK及其依赖项,或客户端代码倾向于通过HTTP而不是Flu ...

  3. Flume:source和sink

    Flume – 初识flume.source和sink 目录基本概念常用源 Source常用sink 基本概念  什么叫flume? 分布式,可靠的大量日志收集.聚合和移动工具.  events ...

  4. FLUME KAFKA SOURCE 和 SINK 使用同一个 TOPIC

    FLUME KAFKA SOURCE 和 SINK 使用同一个 TOPIC 最近做了一个事情,过滤下kakfa中的数据后,做这个就用到了flume,直接使用flume source 和 flume s ...

  5. 一次flume exec source采集日志到kafka因为单条日志数据非常大同步失败的踩坑带来的思考

    本次遇到的问题描述,日志采集同步时,当单条日志(日志文件中一行日志)超过2M大小,数据无法采集同步到kafka,分析后,共踩到如下几个坑.1.flume采集时,通过shell+EXEC(tail -F ...

  6. Flume组件source,channel,sink源码分析

    LifeCycleState: IDLE, START, STOP, ERROR [Source]: org.apache.flume.Source 继承LifeCycleAware{stop() + ...

  7. Flume笔记--source端监听目录,sink端上传到HDFS

    官方文档参数解释:http://flume.apache.org/FlumeUserGuide.html#hdfs-sink 需要注意:文件格式,fileType=DataStream 默认为Sequ ...

  8. flume自定义Source(taildirSource),自定义Sink(数据库),开发完整步骤

    一.flume简单了解推荐网站(简介包括简单案例部署): http://www.aboutyun.com/thread-8917-1-1.html 二.我的需求是实现从ftp目录下采集数据,目录下文件 ...

  9. Flume学习之路 (二)Flume的Source类型

    一.概述 官方文档介绍:http://flume.apache.org/FlumeUserGuide.html#flume-sources 二.Flume Sources 描述 2.1 Avro So ...

随机推荐

  1. #include<bits/stdc++.h>的使用

    #include<bits/stdc++.h>包含了C++里面所有的库函数,因此在写任何程序的时候只需要加上#include<bits/stdc++.h>即可.

  2. Blender的单位:一图弄懂Blender的单位

    1设置单位,在右边的场景设置里,可以设置公制,英制.下面还可以设置基础单位长度,就是单位网格对应的长度. 2显示单位,按N出现在右边的属性栏里,可以设置选中的显示长度及角度. 3测量,按T出现在左边d ...

  3. 使用mongoose连接mongodb(转载文章)

    mongodb数据库 MongoDB是一个高效的基于分布式文件存储的数据库,将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值 ...

  4. Centos7修改默认最大文件打开数

    方法一: [root@bogon ~]# vi /etc/systemd/system.conf [root@bogon ~]# cat /etc/systemd/system.conf # This ...

  5. MySQL安装步骤详解

    MySQL安装 一.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认 ...

  6. Benthos metrcis 说明

    Benthos 按照input, pipeline ,buffer,conditions,ouput 这个几个大类,为我们提供了 方便的分析metrics,支持json 格式同时可以暴露为 stats ...

  7. VIM命令操作

    退出命令 :wq 保存并退出 ZZ 保存并退出 :q! 强制退出并忽略所有更改 :e! 放弃所有修改,并打开原来文件.

  8. 设置 IntelliJ IDEA 的彩色代码主题

    首先,给出一系列 IntelliJ IDEA 代码的彩色主题,供大家选择: VibrantUnknown(Darcula) FadeComments NicePython Solarized Have ...

  9. 合并两个sorted ranges(merge和inplace_merge)

    merge //版本一:用operator <比较元素 template <class InputerIterator1,class InputerIterator2,class Outp ...

  10. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

    Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 1. BeanFactory BeanFactory,以Factory结尾,表示它是一个工厂类(接口),用于 ...