flume的框架:
- source
- interceptor
- selector
- channel
- sink
Agent的配置
- Agent的基本概念及应用
- 定义sources、channels、sinks组件名称
- 配置sources、channels、sinks
- 连接sources、channels、sinks
案例:采集指定主机的端⼝44444⽇志数据:
- 编辑配置文件:
# 定义agent中各组件的名字
# a1为agent名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置source组件:r1
# r1的类型为netcat,⽤来监听⼀个指定端⼝,并接收监听到的数据。
a1.sources.r1.type = netcat
# r1绑定本地IP地址
a1.sources.r1.bind = node01
# r1采集端⼝44444
a1.sources.r1.port = 44444
# 描述和配置channel组件,此处使⽤是内存缓存的⽅式
# c1的类型为内存
a1.channels.c1.type = memory
# c1最多保存1000个事件
a1.channels.c1.capacity = 1000
#在每次从source中获取数据或者将数据sink出去的⼀次事务操作中,最多处理的event数为100。
a1.channels.c1.transactionCapacity = 100
# 描述和配置sink组件:k1
# k1的类型为logger,记录⽇志,通常⽤于测试或调试。
a1.sinks.k1.type = logger
# 描述和配置source channel sink之间的连接关系
# ⼀个source可以连接多个channel,所以是channels
a1.sources.r1.channels = c1
# ⼀个sink只可以连接⼀个channel,所以是channel
a1.sinks.k1.channel = c1
- 启动Flume Agent:
flume-ng agent -n a1 -c /usr/local/software/flume/conf -f /opt/flumeconf/netcat-memory-logger.conf -Dflume.root.logger=INFO,console
- 上述代码参数解析:
- -n a1 指定这个 agent 的名字
- -c conf 指定 flume ⾃身的配置⽂件所在⽬录
- -f conf/netcat-logger.conf 指定所描述的采集⽅案
- -Dflume.root.logger=INFO,console 设置⽇志等级
- 常见的Source类型及应用
- netcat Source:监听指定的一个端口
参数 | 默认值 | 说明 |
type | - | netcat |
bind | - | IP地址或者主机号 |
port | - | 指定的端口 |
channels | - | 连接的channel |
- avro Source:监听指定的端口(使用avro协议传输数据)
参数 | 默认值 | 说明 |
type | - | avro |
bind | - | ip地址或主机号 |
port | - | 指定的端口 |
channels | - | 连接的channel |
- spooldir Source:用于监听目录中的文件。读完后及时文件内容发生改变也不会再次读取。
参数 | 默认值 | 说明 |
type | - | spooldir |
spoolDir | - | 监听的目录 |
fileHeader | - | 是否添加文件的绝对路径到Header中 |
batchsize | 100 | 每次写入channel的event数量 |
fileSuffix | .COMPLETED | 读取后的文件后缀 |
channels | - | 连接的channel |
- exec Source:用于监听某一个指令。常见的是tail -F 文件,即只要在文件后面添加数据,即可获取数据。
参数 | 默认值 | 说明 |
type | - | exec |
command | - | 监听的命令(tail -F /opt/flumedata/log.01) |
channels | - | 连接的channels |
- taildir Source:实时监控指定⽬录下新增或修改的文件。每个文件的tail位置都被记录在一个json文件中。
参数 | 默认值 | 说明 |
type | - | TAILDIR |
filegroups | - | 目录的集合 |
filegroups. | - | 文件夹的绝对路径 |
positionFile | - | json文件的路径 |
channels | - | 连接的channel |
- http Source:将指定主机端口的http请求转换为event数据。
参数 | 默认值 | 说明 |
type | - | http |
bind | - | ip地址或主机名 |
port | - | 指定端口 |
channels | - | 连接的channel |
- kafka:从kafka中获取数据。
参数 | 默认值 | 说明 |
type | - | org.apache.flume.source.kafka.KafkaSource |
batchsize | - | 写入channel的最大event数 |
kafka.bootstrap.servers | - | 服务器 |
kafka.topics | - | 主题 |
kafka.topics.regex | - | 正则表达式匹配 |
kafka.consumer.group.id | flume | kafka消费组 |
- 常见的channel类型:
- memory channel:将数据存放在内存中。
参数 | 默认值 | 说明 |
type | - | memory |
capacity | 100 | 在channel中的最大event数量 |
transactionCapacity | 100 | 每次处理的event最大数量 |
keep-alive | 3 | channel写入或读取的最大超时时间 |
- file channel:将数据存储在磁盘中。
参数 | 默认值 | 说明 |
type | - | file |
checkpointDir | 家目录 | 检查点目录 |
dataDir | - | 存储在磁盘的绝对路径 |
capacity | 1000000 | channel中最大event数量 |
transactionCapacity | 1000 | 每次处理的event数量 |
keep-live | 3 | 写入或读取的最大超时时间 |
- 常见的sink类型:
- logger sink:用于测试。
参数 | 默认值 | 说明 |
type | - | logger |
channel | - | 连接的channel |
- filerool sink:将得到的数据存储在磁盘中。
参数 | 默认值 | 说明 |
type | - | file_rool |
sink.directory | - | 保存数据的目录 |
channel | - | 连接的channel |
- avro sink:将数据发给另外一个agent。
参数 | 默认值 | 说明 |
type | - | avro |
hostname | - | ip地址或主机名 |
port | - | 指定端口 |
channel | - | 连接的channel |
- 常见的拦截器:
- 时间戳拦截器:将时间戳插入到flume的事件报头中。
参数 | 默认值 | 说明 |
type | - | timestamp |
preserveExisting | flase | 如果设置为true,若事件中报头时间戳信息已经存在,不会替换时间戳报头的值 |
a1.sources = r1
# 配置⼀个拦截器,保留含‘spark’或‘hadoop’的事件
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors = ts
a1.sources.r1.interceptors.ts.type = timestamp
a1.sources.r1.interceptors.ts.preserveExsisting=false
- 正则过滤拦截器:过滤不满⾜正则的事件或收集满足正则的事件。
参数 | 默认值 | 说明 |
type | - | REGEX_FILTER |
reger | .* | 匹配除"\n"之外的任何字符 |
excludeEvents | false | 默认收集匹配到的事件。如果为true,则会删除匹配的event,收集未匹配的事。 |
a1.sources = r1
# 配置⼀个拦截器,保留含‘spark’或‘hadoop’的事件
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = REGEX_FILTER
a1.sources.r1.interceptors.i1.regex = (spark)|(hadoop)
a1.sources.r1.interceptors.i1.execludeEvents = false
- 静态拦截器:将k/v键值对插⼊到flume的事件的报头(头信息)中。
参数 | 默认值 | 说明 |
type | - | static |
perserverExisting | true | 如果设置为true,若事件中报头 k/v 键值对信息已经存在,不会替换其值 |
key | key | 创建的报头键名 |
value | value | 创建的报头值 |
a1.sources = r1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = static
a1.sources.r1.interceptors.i1.key = city
a1.sources.r1.interceptors.i1.value = cs
- 主机拦截器:插⼊服务器的ip地址或者主机名到flume的事件报头(头信息)中。
参数 | 默认值 | 说明 |
type | - | host |
preserveExisting | false | 如果设置为true,若事件中报头服务器信息已经存在,不会替换其值 |
useIP | true | 若设置为true,则使⽤ip地址;若设置为false,则使⽤主机名 |
hostHeader | host | 报头名 |
a1.sources = r1
a1.channels = c1
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host
希望这篇文章对大家有所帮助,在这里致谢我的flume老师:向老师。