2020-10-20 重温Flume

it2023-01-20  55

Flume是一个实时日志收集工具,具有分布式,高可靠,高可用等特点。接受各类型数据发送方 ,对数据可进行简单的处理,传输到各类数据接收方。

目前生产中,使用flume采集请求日志到kafka,然后通过storm读取kafka中的数据保存到数据库。

1.可靠性 当节点出现故障时,日志能够被传送到其他节点上而不会丢失。 Flume提供了三种级别的可靠性保障,从强到弱依次分别为: end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。), Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送), Besteffort(数据发送到接收方后,不会进行确认)。

2.核心概念 Client:Client生产数据,运行在一个独立的线程。 Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。) Flow: Event从源点到达目的点的迁移的抽象。 Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。) Source: 数据收集组件。(source从Client收集数据,传递给Channel) Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。) Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)

3.Source Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。

Flume提供了各种source的实现,包括Avro Source、Exce Source、Spooling Directory Source、NetCat Source、Syslog Source、Syslog TCP Source、Syslog UDP Source、HTTP Source、HDFS Source,etc。如果内置的Source无法满足需要, Flume还支持自定义Source。

4.Channel Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。

Flume对于Channel,则提供了Memory Channel、JDBC Chanel、File Channel,etc。 MemoryChannel可以实现高速的吞吐,但是无法保证数据的完整性。 MemoryRecoverChannel在官方文档的建议上已经建义使用FileChannel来替换。 FileChannel保证数据的完整性与一致性。在具体配置FileChannel时,建议FileChannel设置的目录和程序日志文件保存的目录设成不同的磁盘,以便提高效率。

5.Sink Flume Sink取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。

Flume也提供了各种sink的实现,包括HDFS sink、Logger sink、Avro sink、File Roll sink、Null sink、HBase sink,etc。 Flume Sink在设置存储数据时,可以向文件系统中,数据库中,hadoop中储数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据。 在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。

6.命令  bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties -Dflume.root.logger=INFO     A source instance can specify multiple channels, but a sink instance can only specify one channel.  The property “type” needs to be set for each component for Flume to understand what kind of object it needs to be. Each source, sink and channel type has its own set of properties required for it to function as intended.     The source and sink within the given agent run asynchronously with the events staged in the channel.    参考地址:  http://flume.apache.org/  https://www.cnblogs.com/qingyunzong/p/8994494.html  https://blog.csdn.net/qq_35078688/article/details/83552451

最新回复(0)