`
jinnianshilongnian
  • 浏览: 21504346 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418718
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008851
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639518
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259941
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597357
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250234
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5858980
Group-logo
跟我学Nginx+Lua开...
浏览量:702015
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785233
社区版块
存档分类
最新评论

Flume架构与源码分析-整体架构

阅读更多

最近在学习Flume源码,所以想写一份Flume源码学习的笔记供需要的朋友一起学习参考。

 

1、Flume介绍

Flume是cloudera公司开源的一款分布式、可靠地进行大量日志数据采集、聚合和并转移到存储中;通过事务机制提供了可靠的消息传输支持,自带负载均衡机制来支撑水平扩展;并且提供了一些默认组件供直接使用。

Flume目前常见的应用场景:日志--->Flume--->实时计算(如Kafka+Storm) 、日志--->Flume--->离线计算(如HDFS、HBase)、日志--->Flume--->ElasticSearch。

2、整体架构

Flume主要分为三个组件:Source、Channel、Sink;数据流如下图所示:


 

1、Source负责日志流入,比如从文件、网络、Kafka等数据源流入数据,数据流入的方式有两种轮训拉取和事件驱动;

2、Channel负责数据聚合/暂存,比如暂存到内存、本地文件、数据库、Kafka等,日志数据不会在管道停留很长时间,很快会被Sink消费掉;

3、Sink负责数据转移到存储,比如从Channel拿到日志后直接存储到HDFS、HBase、Kafka、ElasticSearch等,然后再有如Hadoop、Storm、ElasticSearch之类的进行数据分析或查询。

 

一个Agent会同时存在这三个组件,Source和Sink都是异步执行的,相互之间不会影响。

 

假设我们有采集并索引Nginx访问日志,我们可以按照如下方式部署:


 

1、Agent和Web Server是部署在同一台机器;

2、Source使用ExecSource并使用tail命令采集日志;

3、Channel使用MemoryChannel,因为日志数据丢点也不算什么大问题;

4、Sink使用ElasticSearchSink写入到ElasticSearch,此处可以配置多个ElasticSearch服务器IP:PORT列表以便提升处理能力。

 

以上介绍了日志是如何流的,对于复杂的日志采集,我们需要对Source日志进行过滤、写到多个Channel、对Sink进行失败处理/负载均衡等处理,这些Flume默认都提供了支持:


 

1、Source采集的日志会传入ChannelProcessor组件,其首先通过Interceptor进行日志过滤,如果接触过Servlet的话这个概念是类似的,可以参考《Servlet3.1规范翻译——过滤器 》 ;过滤器可以过滤掉日志,也可以修改日志内容;

2、过滤完成后接下来会交给ChannelSelector进行处理,默认提供了两种选择器:复制或多路复用选择器;复制即把一个日志复制到多个Channel;而多路复用会根据配置的选择器条件,把符合条件的路由到相应的Channel;在写多个Channel时可能存在存在失败的情况,对于失败的处理有两种:稍后重试或者忽略。重试一般采用指数级时间进行重试。

 

我们之前说过Source生产日志给Channel、Sink从Channel消费日志;它俩完全是异步的,因此Sink只需要监听自己关系的Channel变化即可。

 

到此我们可以对Source日志进行过滤/修改,把一个消息复制/路由到多个Channel,对于Sink的话也应该存在写失败的情况,Flume默认提供了如下策略:



 

默认策略就是一个Sink,失败了则这个事务就失败了,会稍后重试。

 

Flume还提供了故障转移策略:


 

Failover策略是给多个Sink定义优先级,假设其中一个失败了,则路由到下一个优先级的Sink;Sink只要抛出一次异常就会被认为是失败了,则从存活Sink中移除,然后指数级时间等待重试,默认是等待1s开始重试,最大等待重试时间是30s。

 

Flume也提供了负载均衡策略:

 

负载均衡算法默认提供了两种:轮训和随机;其通过抽象一个类似ChannelSelectorSinkSelector进行选择,失败补偿机制和Failover中的算法类似,但是默认是关闭失败补偿的,需要配置backoff参数为true开启。

 

到此Flume涉及的一些核心组件就介绍完了,对于Source和Sink如何异步、Channel提供的事务机制等我们后续分析组件时再讲。

 

假设我们需要采集非常多的客户端日志并对他们进行一些缓冲或集中的处理,就可以部署一个聚合层,整体架构类似于如下:


 1、首先是日志采集层,该层的Agent和应用部署在同一台机器上,负责采集如Nginx访问日志;然后通过RPC将日志流入到收集/聚合层;在这一层应该快速的采集到日志然后流入到收集/聚合层;

2、收集/聚合层进行日志的收集或聚合,并且可以进行容错处理,如故障转移或负载均衡,以提升可靠性;另外可以在该层开启文件Channel,做数据缓冲区;

3、收集/聚合层对数据进行过滤或修改然后进行存储或处理;比如存储到HDFS,或者流入Kafka然后通过Storm对数据进行实时处理。

 

 

到此从Flume核心组件到一般的部署架构我们就大体了解了,而涉及的一些实现细节在接下来的部分进行详细介绍。

 

 

  • 大小: 8.4 KB
  • 大小: 23 KB
  • 大小: 15.5 KB
  • 大小: 8.2 KB
  • 大小: 8.9 KB
  • 大小: 10.7 KB
  • 大小: 30.1 KB
5
0
分享到:
评论
3 楼 帅得突破天际 2015-12-10  
    TAO哥牛逼
2 楼 jinnianshilongnian 2015-12-04  
Trust_FreeDom 写道
你好,我想请问一下,如果用spoolDir的方式收集日志,且目前应用的日志是通过logback输出的,我目前的做法是logback的日志按分钟输出到spoolDir监控的目录,但后缀名为.tmp,flume设置忽略,通过shell脚本定时将监控目录的tmp文件重命名,使flume发现,但存在一个问题,spoolDir默认是每个日志行一个event,但logback的error日志中除了message,还有异常堆栈信息,且我们也希望收集,logback有replace消息的方法,但对异常堆栈不起作用。

请问你是怎么使用spoolDir source方式的?有什么需要注意的吗?
另:我们暂时收集的日志不多,要写入数据库。

考虑实现自己的EventSerializer
1 楼 Trust_FreeDom 2015-12-04  
你好,我想请问一下,如果用spoolDir的方式收集日志,且目前应用的日志是通过logback输出的,我目前的做法是logback的日志按分钟输出到spoolDir监控的目录,但后缀名为.tmp,flume设置忽略,通过shell脚本定时将监控目录的tmp文件重命名,使flume发现,但存在一个问题,spoolDir默认是每个日志行一个event,但logback的error日志中除了message,还有异常堆栈信息,且我们也希望收集,logback有replace消息的方法,但对异常堆栈不起作用。

请问你是怎么使用spoolDir source方式的?有什么需要注意的吗?
另:我们暂时收集的日志不多,要写入数据库。

相关推荐

    flume-ng-sql-source-1.5.2

    总之,Flume-ng-sql-source-1.5.2为Flume增加了强大的SQL数据源能力,使得数据采集范围扩大到了结构化数据领域,这对于构建实时数据处理和分析系统至关重要。通过对源码的深入理解和使用,可以更高效地利用这一工具...

    flume-ng-sql-source-release-1.5.2.zip

    总结来说,"flume-ng-sql-source-release-1.5.2.zip"提供了一种高效的方式,通过SQL查询从数据库中抽取数据,并将其无缝地集成到Apache Flume的流处理系统中,最终将数据推送到Kafka,以支持实时的大数据分析流程。...

    flume-interceptor-1.0-SNAPSHOT.jar

    注意:flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-1.0-SNAPSHOT.jar flume-interceptor-...

    flume-ng-sql-source-1.5.2.jar

    flume-ng-sql-source-1.5.2.jar从数据库中增量读取数据到hdfs中的jar包

    Flume-ng-1.6.0-cdh.zip

    Flume-ng-1.6.0-cdh.zip 内压缩了 3 个项目,分别为:flume-ng-1.6.0-cdh5.5.0.tar.gz、flume-ng-1.6.0-cdh5.7.0.tar.gz 和 flume-ng-1.6.0-cdh5.10.1.tar.gz,选择你需要的版本。

    flume-ng-sql-source-1.5.1

    flume-ng-sql-source-1.5.1 flume连接数据库 很好用的工具

    flume-ng-sql-source-1.5.3.jar

    flume-ng-sql-source-1.5.3.jar,flume采集mysql数据jar包,将此文件拖入FLUME_HOME/lib目录下,如果是CM下CDH版本的flume,则放到/opt/cloudera/parcels/CDH-xxxx/lib/flume-ng/lib下,同样需要的包还有mysql-...

    flume-ng-1.5.0-cdh5.3.6.rar

    flume-ng-1.5.0-cdh5.3.6.rarflume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume-ng-1.5.0-cdh5.3.6.rar flume...

    flume-ng-sql-source-1.4.3.jar

    总的来说,Flume-ng-sql-source-1.4.3.jar是数据工程师和分析师的得力助手,它将数据库数据的采集与Flume的强大功能相结合,为企业的大数据战略提供了一条有效的数据输入途径。在当前大数据时代,掌握如何使用这一...

    flume-ng-1.6.0-cdh5.5.0.tar.gz

    "flume-ng-1.6.0-cdh5.5.0.tar.gz" 是 Apache Flume 的一个特定版本,具体来说是 "Next Generation" (ng) 版本的 1.6.0,与 Cloudera Data Hub (CDH) 5.5.0 发行版兼容。CDH 是一个包含多个开源大数据组件的商业发行...

    flume-ng-sql-source.jar

    flume是一个日志收集器,更多详细的介绍可以参照官网:http://flume.apache.org/ flume-ng-sql-source实现oracle增量数据读取 有了这个jar文件即可从关系型数据库拉去数据到flume

    flume-taildir-source-1.9.0.jar

    flume断点续传覆盖jar,使用组件flume-taildir-source-1.9.0覆盖flume/bin目录下的jar即可

    spark-streaming-flume-sink_2.11-2.0.0.jar

    spark-streaming-flume-sink_2.11-2.0.0.jar的jar包。

    flume-interceptor-1.0.0-jar-with-dependencies.jar

    flume拦截器 保留binlog es、data、database、table、type字段 分区字段名称: eventDate 放入 /opt/cloudera/parcels/CDH/lib/flume-ng/lib目录重启flume即可

    flume-ng-sql-source

    包含flume-ng-sql-source-1.5.1&flume;-ng-sql-source-1.4.1 此内容均为网上下载

    flume-ng-1.6.0-cdh5.14.2.tar.gz

    Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...

    flume-ng-1.6.0-cdh5.10.1.tar.gz的下载

    5. **集成CDH**:`flume-ng-1.6.0-cdh5.10.1` 版本是专门为CDH 5.10.1设计的,这意味着它已经与CDH中的其他组件(如Hadoop、Hive等)进行了很好的集成和优化,可以直接在CDH环境中部署和运行。 解压`apache-flume-...

Global site tag (gtag.js) - Google Analytics