Sink—Event发送
主要职责是将Event传输到下一个Agent或最终目的地,成功传输完成将Event从Channel中移除
Logger Sink
- 记录指定级别(比如INFO,DEBUG,ERROR等)的日志,通常用于调试
- 要求,在 --conf(-c )参数指定的目录下有log4j的配置文件
- 根据设计,logger sink将body内容限制为16字节,从而避免屏幕充斥着过多的内容。如果想要查看调试的完整内容,那么你应该使用其他的sink,也许可以
使用file_roll sink,它会将日志写到本地文件系统中; - 配置项 说明
channel 绑定通道
type logger
File_roll Sink
- 在本地系统中存储事件
- 需要在本地文件系统创建一个缓冲目录;
- 每隔指定时长生成文件保存这段时间内收集到的日志信息
- 配置项 说明
channel 绑定通道
type file_roll
sink.directory 文件被存储的目录
sink.rollInterval 30() 记录日志到文件里,每隔30秒生成一个新日志文件。如果设置为0,则禁止滚动,从而导致所有数据被写入到一个文件中。
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=8888
#描述sink
a1.sinks.s1.type=file_roll
a1.sinks.s1.sink.directory=/home/work/flumedata
a1.sinks.s1.sink.rollInterval=60
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
- 创建指定的文件目录 /home/flume
HDFS Sink
- 此Sink将事件写入到Hadoop分布式文件系统HDFS中
- 目前它支持创建文本文件和序列化文件,并且对这两种格式都支持压缩
- 根据经过的时间、数据的大小、事件的数量定期滚动文件(关闭当前的文件并创建新的文件)
- 对于正在进行写操作处理的文件其文件名会添加一个后缀“.tmp”
- 这些文件可以分卷,按照指定的时间或数据量或事件的数量为基础
- 它还通过类似时间戳或机器属性对数据进行 buckets/partitions 操作
- HDFS的目录路径可以包含将要由HDFS替换格式的转移序列用以生成存储事件的目录/文件名
- 使用这个Sink要求haddop必须已经安装好,以便Flume可以通过hadoop提供的jar包与HDFS进行通
- 配置项 说明
channel 绑定的通道
type hdfs
hdfs.path HDFS 目录路径 (hdfs://namenode/flume/webdata/)
hdfs.inUseSuffix .tmp Flume正在处理的文件所加的后缀
hdfs.rollInterval 文件生成的间隔事件,默认是30,单位是秒
hdfs.rollSize 生成的文件大小,默认是1024个字节 ,0表示不开启此项
hdfs.rollCount 每写几条数据就生成一个新文件,默认数量为10
每写几条数据就生成一个新文件,
hdfs.fileType ----- SequenceFile/DataStream/CompressedStream
hdfs.retryInterval ----- 80 Time in seconds between consecutive attempts to close a file. Each close call costs multiple RPC round-trips to the
Namenode, so setting this too low can cause a lot of load on the name node. If set to 0 or less, the sink will not attempt
to close the file if the first attempt fails, and may leave the file open or with a ”.tmp” extension.
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=8888
#描述sink
a1.sinks.s1.type=hdfs
a1.sinks.s1.hdfs.path=hdfs://192.168.234.21:9000/flume
a1.sinks.s1.hdfs.fileType=DataStream
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
Avro Sink
- 将源数据进行利用avro进行序列化之后写到指定的节点上
- 是实现多级流动、扇出流(1到多) 扇入流(多到1) 的基础
- 配置项 说明
channel 绑定的通道
type avro
hostname 要发送的主机
port 要发往的端口号
多级流动
概述
- 让01机的flume通过netcat source源接收数据,然后通过avro sink 发给02机
- 02机的flume利用avro source源收数据,然后通过avro sink 传给03机
- 03机通过avro source源收数据,通过logger sink 输出到控制台上
需要配置三台云主机的Flume配置
a. 01机的配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=8888
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=flume02
a1.sinks.s1.port=9999
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
b. 02机的配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source
a1.sources.r1.type=avro
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=9999
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.213
a1.sinks.s1.port=9999
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
c. 03机的配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=avro
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=9999
#描述sink
a1.sinks.s1.type=logger
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
扇出流
- 01机的配置文件
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1 s2
a1.channels=c1 c2
#描述/配置a1的source1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=8888
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
a1.channels.c2.type=memory
a1.channels.c2.capacity=1000
a1.channels.c2.transactionCapacity=100
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.212
a1.sinks.s1.port=9999
a1.sinks.s2.type=avro
a1.sinks.s2.hostname=192.168.234.213
a1.sinks.s2.port=9999
#为channel 绑定 source和sink
a1.sources.r1.channels=c1 c2
a1.sinks.s1.channel=c1
a1.sinks.s2.channel=c2
- 02,03配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=avro
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=9999
#描述sink
a1.sinks.s1.type=logger
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
扇入流
- 02,03的配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=netcat
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=8888
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#描述sink
a1.sinks.s1.type=avro
a1.sinks.s1.hostname=192.168.234.163
a1.sinks.s1.port=9999
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1
- 01机的配置示例:
#配置Agent a1 的组件
a1.sources=r1
a1.sinks=s1
a1.channels=c1
#描述/配置a1的source1
a1.sources.r1.type=avro
a1.sources.r1.bind=0.0.0.0
a1.sources.r1.port=9999
#描述内存channel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100
#描述sink
a1.sinks.s1.type=logger
#为channel 绑定 source和sink
a1.sources.r1.channels=c1
a1.sinks.s1.channel=c1