flume源码阅读-总体介绍
来源:互联网 发布:nginx跳转 域名不变 编辑:程序博客网 时间:2024/06/05 00:40
flume源码阅读之总体介绍
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume官网地址: Flume ,
源代码地址:source
为什么读flume源代码
- 为什么要去读flume的源码,最近公司的项目中准备加上监控,准备的做法是基于日志来分析整个系统的运行状态,那么基于日志去分析,首先要做的就是将散落在各个业务系统中日志收集起来。
笔者一直好奇这些日志收集框架是怎么做到将日志聚合在一起,于是乎百度了一下,发现Flume这个玩意。 就这样带着好奇心,开始了源代码阅读之路
之前也断断续续的读过一些源码,但是什么也没有留下,等会过头再看,感觉什么又都忘了,因此下定决心把看到的一些东西记录下来
在阅读Flume的过程中,发现Flume的整体架构还是非常清晰的,比较容易理解
怎样阅读源码
对于怎样去读源码,仁者见仁,智者见智,下面仅仅陈述一下我的方法:
这里分为两种情况:
对于自己已经熟悉的开源框架,那么直接找到源码的地址,下载,编译就好,目前很多的开源框架都有很好的依赖管理工具 类似: Maven Gradle等,直接导入到IDE中就可以
对于自己不熟悉的框架,比如这次的Flume,首先看一下User Guide 了解一下这个框架是干什么用的,大概会是怎么去使用, 然后去自己尝试一下怎么使用
对于所有的开源框架 都会有一个入口类,那么怎么去找个这个入口类,一个最简单的方式就是百度一下,一般都会有人告诉你入口类在哪,那么如果是一个全新的框架,在网上找不到那怎么去找呢? 这里又分为两种情况: 1. 类似 Spring 这种框架是依赖于容器启动的(当然也可以单独启动),那么就要知道这个框架需要再Web.xml 配置了什么(我们都知道一个WEB应用启动都会先去找Web.xml) 2. 类似Flume 这种是可以通过脚本启动的,这种是最简单的,之间看一下启动脚本就完全明白了
flume的整体架构
Flume的整体是有3个大的组件构成:
1. Source: 完成数据的收集,将散落在各个业务系统中数据发送到Channel中
2. Channel: 类似一个Queue的作用,对Source过来的数据进行暂时的缓存, 也提供了一个事务容器
3. Sink :对数据进行处理,将其放入到hdfs或hbase或者还可以再放入Source中
flume的代码结构
flume的代码结构相对来说还是比较清晰的,各个功能模块都分布在不同的Package中:
下面简单介绍一下各个包的作用:
- flume-ng-node: 包含了启动flume的主类
- flume-ng-core: flume的核心类都在这里
- flume-ng-configuration:包含了Source Sink Channel的配置相关信息
- flume-ng-sdk: 提供给客户端编写Source Sink的 SDK工具
flume-ng-tests: flume的单元测试包 可以看一下 怎么写单元测试
flume-avro-source: avro source
- flume-jms-source: jms source
- flume-twitter-source: twitter source
- flume-thrift-source: thirft source
flume-scribe-source: scribe source
flume-jdbc-channel : jdbc channel
- flume-file-channel: file channel
flume-spillable-memory-channel : memory channel
flume-hdfs-sink: hdfs sink
- flume-irc-sink: irc sink
- flume-ng-elasticserarch-sink : elasticsearch sink
- flume-ng-hbase-sink: hbase sink
flume-ng-morphile-solr-sink: solr sink
flume-tools: 一些工具类
- flume源码阅读-总体介绍
- flume源码阅读-总体介绍
- flume源码分析一:总体架构
- Flume-NG HDFSEventSink源码阅读
- flume源码阅读之生命周期
- junit4X系列源码--总体介绍
- dex2jar源码解析----总体介绍
- libevent源码解读(一)--总体阅读
- Live555源码阅读之Mediaserver总体预览
- 【Java】【Flume】Flume-NG源码阅读之AvroSink
- Flume-NG源码阅读之FileChannel
- Flume-NG源码阅读之SpoolDirectorySource
- flume源码阅读之主启动类
- Spark Streaming + Flume 相关源码阅读
- Flume-NG源码阅读之HDFSEventSink
- Flume-NG源码阅读之Interceptor
- Flume-NG源码阅读之SpoolDirectorySource
- Flume-NG源码阅读之Interceptor
- 阿里开发,一道排序题的感悟
- There is no Action mapped for namespace [/] and action name [] associated with context path [/dxm__s
- 关于Genymotion出现“An error occured while deploying the file.INSTALL_FAILED_INVALID_URI”问题的原因分析
- 阿里笔试后的总结--15年移动客户端开发在线笔试
- Hibernate二级缓存详解
- flume源码阅读-总体介绍
- 单服务器单进程吞吐量优化总结
- Android中处理软键盘上“回车键”的2种方法
- Slideout.js – 触摸滑出式 Web App 导航菜单
- IOS学习之collectionView的使用
- 微信支付 V3.3.7 JSAPI网页内支付接口心得
- Eclipse下JGibbLDA使用总结
- 第一章第5题
- 23种设计模式(2):工厂方法模式