Flume
Flume可以有效的从不同的源,收集、聚合移动大量日志数据到集中式数据存储
Flumed的优势
Flume可以将应用产生的数据存储到任何集中的存储器中,比如HDFS ,Hive,Hbase。
1.当收集数据的速度大于写入数据的时候 ,Flume也会在数据生产者和数据收容器间做出调增
2.支持各种接入资源数据的类型和接出数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JpPCMUSb-1610538847306)(C:\Users\Acer\Desktop\思维导图\flume简单结构图.png)]
WebSever为数据源,Source接受数据源,流向Channel作为临时缓冲,Sink不断地从Channel里面抽取数据,并将数据发送到存储、索引系统,或者发送到另一个Flume Agent
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a2uEInuC-1610538847310)(C:\Users\Acer\Desktop\思维导图\Flume结构图详解.png)]
Agent是一个JVM进程,它以事件的形式将数据从源头送至目的地。Agent主要有三个部分组成:Source、Channel、Sink。
Event
Flume数据传输的基本单元,带有一个可选的消息头。如果是文本文件,通常是一行记录。Event从Source,流向Channel,再到Sink,Sink将数据写入目的地。
Source
Source是负责接收数据到Flume Agent的组件。Source可以接收各种类型和格式的日志数据。
Channel
Channel主要提供一个队列的功能。是位于Source和Sink之间的缓冲区。Source到Channel是完全事务性。
一旦事务中的所有事件全部都传递到Channel且提交成功,那么Source就将其标记为完成。如果事件传递失败,那么事务将会回滚。
Flume对于Channel提供了Memory Channel、 File Channel 、JDBC Channel、Kafka Channel 以及自定义Channel等。
Memory Channel 是内存中的队列,可以在不考虑数据丢失的情况下使用
File Channel 将所有事件都写入磁盘中 ,可以防止数据丢失。
Flume 支持事务,分为Put事务与Take事务。