Flume
一、简介:
Flume是一种分布式,可靠且可用的服务,用于有效的收集、聚合和移动大量日志数据。
优点:
1、具有基于数据流的简单灵活的架构。
2、具有可靠的可靠性机制和许多故障转移和恢复机制,具有强的容错能力。
3、使用简单的可扩展数据模型,允许在线分析应用程序。
4、可以将应用产生的数据存储到大部分存储器上。
Flume的工作方式有两种:
1、Coudera提供的Flume-og。
采用多Master的方式,引入ZooKeeper来保存其配置数据,以保证配置数据的一致性。Flume Master之间使用gossip协议(六度分隔理论)同步数据。
2、Apache提供的Flume-ng
采用单节点(数据安全性问题后面实际应用及其原理会有阐述),变为一个纯粹的传输工具。
FLume-og和Flume-ng对比
Flume-ng | Flume-og | |
方式 | 多Master | 单角色节点(agent) |
线程 | 单线程(写入速度大于写出速度会产生数据阻塞) | 多线程(source、channel、sink) |
二、Flume-ng(大数据生产环境常用数据收集工具)
1、Flume-ng架构
Flume-ng为单角色的节点:agent角色,agent由source、channel、sink组成
Source:source用于采集数据,source是对接(个人理解为对接,而不是产生)数据流产生的地方,同时source会将数据流封装发送到channel。
Channel:连接source和sink,类似于队列
Sink:从Channel抽取数据,并将数据写到目标地址。
2、Flume-ng详解
1)、Source
1、功能:source监控某个文件或者端口,拿到数据后封装到event当中,并将event put/commit到channel当中
2、类型:1、avro(序列化、监听avro端口)
2、exec(命令产生的输出作为源)
3、taildir(监控制定的多个文件、可靠性高、不能读取二进制文件、不适用windows系统、)
4、spooling directory(监听目录、目录中文件不许修改且不许重名)、netcat(监听指定端口)
5、kafka(指定topic读数据)。
以上为常用的source,其余source不做赘述。详情见(https://blog.csdn.net/u014612521/article/details/103058090)
2)、Channel
1、功能:channel类似于队列(先进先出),接收来自source的event,并等待sink拉取数据。
2、类型:1、memory channel(固定大小内存、速度快、容易丢数据)
2、JDBC channel(支持JDBC连接的数据库中、官推Derby、数据可恢复)
3、File channel(指定目录、可指定目录大小、数据可恢复、频繁读取磁盘速度慢)
4、spillable memory channel(内存做主要存储、临界点溢写磁盘(配置:overflowCapacity))
以上为常用的channel,其余channel不做赘述。详情见(https://blog.csdn.net/u014612521/article/details/103058809)
3)、Sink
1、功能:sink主动去channel当中去拉数据,然后将数据写到目标地址。
2、类型: 1、hdfs sink(文本和序列化文件、两种文件压缩格式、自动划分文件、桶或区)
2、hive sink(包含分隔符或者JSON数据的events直接写入hive表或分区)
3、logger sink(INFO级别、多用来测试调试)
4、avro sink(events转换为avro events、大小同channel中events大小)
5、thrift sink(events转换为thrift events、大小同channel中events大小)
6、file roll sink(落本地文件)
以上为常用的sink,其余sink不做赘述。详情见(https://www.cnblogs.com/swordfall/p/8157766.html)
4)、event
概述:在整个数据传输的过程中,流动的是event,既事务保证是在event级别进行的。
概念:event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数据,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
Flume整体架构图