1、什么是flume
Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.
flume是一个高效的高可靠的、高可用的、可扩展的、分布式的海量日志的数据收集、聚合、传输的工具。
2、flume的架构
3、flume的组件及作用
client:客户端,运行agent的地方
source:数据源,负责接收数据
channel:管道,负责接收source端的数据,然后将数据推送到sink端
sink:负责从channel端拉取数据,并将其推送到持久化系统。
selector:选择器,作用于source端,然后决定数据发往哪个目标。
interceptor:拦截器,flume允许使用拦截器拦截数据。允许使用拦截器链,作用于source和sink阶段。
event:flume中的事件,相当于一条数据。一条消息
agent:flume的客户端,一个agent运行在一个jvm里,他是flume的最小运行单位。
数据模型
单一数据模型
多数据流模型
4、flume的安装
flume0.9和flume1.x的版本区别
0.9版本叫flume-og,1.x版本叫flume-ng
0.9版本区分逻辑节点和物理节点(集群版),而1.x版本不区分逻辑和物理概念,每一个agent就是一个服务。
0.9版本需要master和zookeeper的支持(集群要有一个老大,一个协调服务),而1.x版本不需要
0.9的开发不是很灵活,而1.x版本开发很灵活的,可以支持很多功能的自定义(source、channel、sink、interceptor、selector等)
a、先将安装包拉上来,然后解压到指定目录
b、vi /etc/profile 编辑一下环境变量 再souce一下
c、vi flume-env.sh 配置一下文件
5、案例 (采集方案)
1、avro + memory + logger
vi /flumeconf/avro-logger.conf
a1.sources=r1
a1.channels=c1
a1.sinks=s1
a1.sources.r1.type = avro
a1.sources.r1.bind = hadoop0001
a1.sources.r1.port = 6666
a1.channels.c1.type=memory
a1.sinks.s1.type = logger
a1.sources.r1.channels = c1
a1.sinks.s1.channel=c1
启动agent:
bin/flume-ng agent -c ./conf -f ./flumeconf/avro-logger.conf -n a1 -Dflume.root.logger=INFO,console
启动是需要一个参数,告诉它启动的是agent。-c 后接指定的配置在哪个目录下。-f指定要使用哪一种方案来采集数据。-n为告诉启动的agent的名字是什么。因为是测试可以将内容打印到控制台,所以-Dflume...指定日记的输出位置
测试:(发送数据要告诉发送到那台机器的哪个端口,所以有-H)
flume-ng avro-client -c /usr/local/flume-1.6.0/conf/ -H hadoop0001 -p 6666 -F ./test.dat
架构
如何实现数据不丢失或者不重复消费
拦截器
source 10000
sink 8000
zookeeper
hbase
实战案例
注意监听目录的时候,可以往目录里面去copy,不能针对目录里面的文件去写日记,数据的文件