1.Flume介绍
Flume是一个分布式、可靠、和高可用的海量日志采集、汇聚和传输的系统。
Flume可以采集文件,socket数据包(网络端口)、文件夹、kafka、mysql数据库等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中
一般的采集、传输需求,通过对flume的简单配置即可实现;不用开发一行代码!
Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
2. agent
Flume中最核心的角色是agent,flume采集系统就是由一个个agent连接起来所形成的一个或简单或复杂的数据传输通道。
对于每一个Agent来说,它就是一个独立的守护进程(JVM),它负责从数据源接收数据,并发往下一个目的地,如下图所示:
Agent的3个组件的设计思想,主要考虑的是:
source和sink之间解耦合,以及异步操作;
(channel可以让source组件和sink组件解耦合,并对数据源产生数据的速度波动起到削峰填谷的作用)
每一个agent相当于一个数据(被封装成Event对象)传递员,内部有3个核心组件:
Source:采集组件,用于跟数据源对接,以获取数据;它有各种各样的内置实现; Sink:下沉组件,用于往下一级agent传递数据或者向最终存储系统传递数据 Channel:传输通道组件(缓冲区),用于协调和解耦source & sink单个agent采集数据
多级agent之间串联