首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flume框架介绍

目录

一、什么是Flume

二、Flume的优点

三、Flume的架构

3.1 Event

3.2 Agent

3.3 Source

3.4 Channel

3.5 Sink

四、Flume的特点

五、Flume的拓扑结构

5.1 Flume-Agent

5.2 单Source,多Channel、Sink

5.3 负载均衡

5.4 Agent聚合

一、什么是Flume

Flume是一个分布式的,可靠的,可用的,非常有效率的对大数据量的日志数据进行收集、聚集、移动信息的服务。Flume仅仅运行在Linux环境下。它是一个基于流式的、数据的、非常简单的(只需要写一个配置文件)、灵活的架构,它也是一个健壮的、容错的。它用一个简单的扩展数据模型用于在线实时应用分析。它的简单表现为:写个source、channel、sink,之后一条命令就能操作成功了。通常在一个集群架构中,Flume、Kafka实时的进行数据收集,Spark,Storm实时去处理,Impala实时去查询。

二、Flume的优点

1、Flume可以和任意存储进程集成。

2、输入的的数据速率大于写入目的存储的速率,flume会进行缓冲,减小HDFS的压力。

3、Flume中的事务基于channel,使用了两个事务模型,确保消息被可靠发送。Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。一旦事务中所有的数据全部成功提交到channel,那么source才认为该数据读取完成。同理,只有成功被sink写出去的数据,才会从channel中移除。

三、Flume的架构

Flume架构如下图所示:

Flume-ng只有一个角色的节点:agent。Agent由source、channel和sink组成。

3.1 Event

Event是Flume数据传输的基本单元。Flume以事件的形式将数据从源头传送到最终的目的地。Event由可选的header和载有数据的一个byte array构成。其中,载有的数据对Flume是不透明的,Header是容纳了key-value字符串的无序集合,key在集合内是唯一的,Header可以在上下文路由中使用扩展。Source监控某个文件,将数据拿到,封装在一个event中,并put/commit(doPut:将批数据先写入临时缓冲区putList。doCommit:检查Channel内存队列是否足够合并。doRollback:Channel内存队列空间不足,回滚数据。)到channel中,channel是一个队列,队列的有点就是先进先出,放好之后尾部一个个event出来,sink主动去从channel中去拉数据(doTake:先将数据取到临时缓冲区takeList。doCommit:如果数据全部发送成功,则清除临时缓冲区的takeList。doRollback:数据发送过程中如果出现异常,rollback将临时缓冲区takeList中的数据归还给Channel内存队列。),sink再把数据写到某个地方,比如HDFS上面。

3.2 Agent

Agent是一个JVM进程,它以事件的形式将数据从源头送至目的。Agent主要有3个部分组成,Source、Channel、Sink。

3.3 Source

Source用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel中。Source输入端常见的类型有:avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy等等。

3.4 Channel

Channel连接Source和Sink,这个有点像队列。它是位于Source和Sink之间的缓冲区,因此Channel允许Source和Sink运作在不同的速率上。Channel是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。Flume自带了两种Channel:Memory Channel和File Channel。Memory Channel是基于内存缓存,在不需要关心数据丢失的情况下适用。File Channel是Flume的持久化Channel,系统宕机不会丢失数据。

3.5 Sink

Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。Sink是完全事务性的。在从Channel批量删除数据之前,每个Sink用Channel启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink就利用Channel提交事务。事务一旦被提交,该Channel从自己的内部缓冲区删除事件。Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

四、Flume的特点

1、复杂流动性:Flume允许用户进行多级流动到最终目的地,也允许扇出流(一到多)、扇入流(多到一)的、故障转移和失败处理。2、可靠性:事务性的数据传递,保证了数据的可靠性。3、可恢复性:通道可以以内存或文件的方式实现,内存更快,但是不可恢复,而文件虽然比较慢但提供了可恢复性。

五、Flume的拓扑结构

5.1 Flume-Agent

这种模式是将多个flume给顺序连接起来了,从最初的source开始到最终sink传送的目的存储系统。此模式不建议桥接过多的flume数量, flume数量过多不仅会影响传输速率,而且一旦传输过程中某个节点flume宕机,会影响整个传输系统。

5.2 单Source,多Channel、Sink

Flume支持将事件流向一个或者多个目的地,这种模式将数据源复制到多个channel中,每个channel都有相同的数据,sink可以选择传送的不同的目的地。

5.3 负载均衡

Flume支持使用将多个sink逻辑上分到一个sink组,Flume将数据发送到不同的sink,主要解决负载均衡和故障转移问题。

5.4 Agent聚合

日常web应用通常分布在很多个服务器上,大者甚至上千个、上万个服务器。产生的日志,处理起来也非常麻烦。用Flume的这种组合方式能很好的解决这一问题,每台服务器部署一个Flume采集日志,传送到一个集中收集日志的Flume,再由此Flume上传到HDFS、Hive、Hbase、jms等,进行日志分析。

------------END-----------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210110A02EBP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券