文章目录
一、简介:
Flume是Cloudera提供的一个高可用,高可靠,分布式的海量日志数据采集、聚合和传输的系统。Flume基于流式架构,灵活简单。
二、结构(官网图)
三、部件介绍:
①Agent:
它是一个独立Flime进程,也是一个jvm进程,它的主要组件有Source、Channel和Sink,它以事件的形式将数据从源头送至目的。
②Source:
负责接收数据的Flume Agent组件,它有很多类型,用来接收不同类型和格式的日志数据,类型有:avro、thrift、exec、jms、spooling directory、netcat、 taildir 、sequence generator、syslog、http、legacy、自定义等;
Avro:
Avro源使用Avro RPC机制,Flume主要的RPC Source也是 Avro Source,可以连接Avro Sink,实现多个flume连接;
Netcat:
监听一个给定的端口,然后把text文件的每一行转换成一个event,适用于监听一个端口;
Thrift:
Thrift是Google开发的用于跨语言RPC通信,它拥有功能强大的软 件堆栈和代码生成引擎,允许定义一个简单的IDL文件来生成不同语言的代码,服务器端和客户端通过共享这个IDL文件来构建来完成通信;
Exec:
通过执行Linux的命令,进行读取文件的数据:例如监控单个文件追加;
JMS:
JMS Source从JMS目标(如队列或者主题)读取消息。JMS应用程序应该可以与任何JMS提供程序一起工作,但是只能使用ActiveMQ进行测试。要求属性是粗体字;
Taildir:
适合用于监听多个实时追加的文件,并且能够实现断点续传;
Spooling directory:
适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;
Sequence generator:
一个简单的序列生成器可以不断生成events,带有counter计数器,从0开始,以1递增,在totalEvents停止。当不能发送events到channels时会不断尝试;
Syslog:
读取系统日志,并生成Flume events。UDP source以整条消息作为一个简单event。TCP source以新一行”n“分割的字符串作为一个新的event;
Http:
启动后会拉起一个web服务来监听指定的ip和port。常用的使用场景:对于有些应用环境中,不能部署Flume SDK及其依赖项,可以在代码中通过HTTP而不是Flume的PRC发送数据的情况,此时HTTP SOURCE可以用来将数据接收到Flume中;
Legacy:
支持Avro和Thrift RPC 连接。为了使用两个Flume 版本搭建的桥梁,你需要开始一个带有avroLegacy或者thriftLegacy source的Flume 1.x agent。0.9.4agent应该有agent Sink指向1.x agent的host/port。
③Channel:
Channel是位于Source和Sink之间的缓冲区。因此,Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作,其本身自带两个channel,分别是:memory和file