最近在学习Flume基础,Flume适用场景,及将源码修改为按文件读取数据,Flume监控目录文件夹,监控文件的原理;
1. Flume简介
Apache Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志
数据。其主要目标是将数据从应用程序传递到Apache Hadoop的HDFS。
它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,该模型可用于在线分析应用程序。
Flume Origin Generation:简称flume OG;
Flume Next Generation:简称flume NG,是为了解决某些已知问题和局限性,并重构了一些核心类和系统后的升级版;另外Flume被并入了Apache;
Flume类似于定制化的一套接近实时的逻辑:
为什么这么说呢? Flume监控目录时,默认500ms就会去扫描下目录看是否有增量文件,或者增量内容;
可以说Flume是优雅的定时任务;
2. Flume 3要素
source ----> channel ----> sink
提供了多个源source,监控目录,或者从日志,kafka等接入数据;
channle类似于缓冲池;
提供了多个目标sink,可以写入kafka,hdfs;
- event 事件
事件是Flume NG可以传输的单个数据单位。事件类似于JMS和类似消息传递系统中的消息,并且通常很小(大约几个字节到几千个字节)。事件通常也是较大数据集中的单个记录。一个事件由标题和主体组成;前者是键/值映射,后者是任意字节数组
- source 资源
Flume NG从中接收数据的数据源。源可以是可轮询的,也可以是事件驱动的。 Flume NG源赛跑者反复轮询可疑源,就像它们听起来一样,其中事件驱动源预计将由其他某种力量驱动。可轮询源的一个示例是序列生成器,它可以简单地生成主体为单调递增的整数的事件。事件驱动源包括接受Avro RPC调用并将RPC有效负载转换为Flume事件的Avro源以及模仿在服务器模式下运行的nc命令行工具的netcat源。源是用户可访问的API扩展点。
- Sink 接收器
接收器与源相对应,因为它是Flume NG中数据的目标。 Flume NG随附的一些内置接收器是Hadoop分布式文件系统接收器,该接收器以各种方式将事件写入HDFS;记录器接收器仅记录接收到的所有事件;空接收器,这是Flume NG的/ dev /版本。空值。接收器是用户可访问的API扩展点。
- Channel 通道
通道是源和接收器之间事件的管道。通道还规定了源与接收器之间事件传递的持久性。例如,某个通道可能在内存中,虽然速度很快,但不能保证不会丢失数据,或者可以完全持久(因此可靠),即使在发生故障(例如断电)的情况下,也可以确保将每个事件传递给连接的接收器失利。通道是用户可访问的API扩展点。
3. 适用场景
Flume适用于对文件递增式的处理,最好一个文件夹下的文件都是一类,上一个文件与下一个增量文件之间没有逻辑关系,可以每个都走相同的处理流程的数据处理;
Flume监控目录或者文件:
- 以文件内容增量够1MB触发;
- 以文件内容增量多行处理;
- 也可以以文件增量触发;
Flume如何避免文件重复处理的呢?
处理完成后的文件会进行文件名前缀或者后缀的修改,以标识其已经处理过;
Flume监控目录: SpoolDirectorySource(是否递归 recursiveDirectorySearch)
Flume监控目录: Taildir 记录positionFile,支持断点续传
source–> channel --> sinks
一个source可以有多个channle, 但是一个sink只能有一个channel
source 到 channel 有两种模式可以支持: 复制技术和 多路技术
- 复制(replicating): 默认值,event发送给所有的channel
- 多路(multiplexing): 选择性的发送给channel
Flume channel
channel就是在agent端存储event的, source发送过来event,sink去消费
- MemoryChannel可以实现高速的吞吐,但是无法保证数据的完整性;
- MemoryRecoverChannel在官方文档的建议上已经建义使用FileChannel来替换。
- FileChannel 保证数据的完整性与一致性,效率低。在具体配置时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。