flume源码阅读-总体介绍

来源:互联网 发布:nginx跳转 域名不变 编辑:程序博客网 时间:2024/06/05 00:40

flume源码阅读之总体介绍

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

Flume官网地址: Flume ,
源代码地址:source

为什么读flume源代码

  • 为什么要去读flume的源码,最近公司的项目中准备加上监控,准备的做法是基于日志来分析整个系统的运行状态,那么基于日志去分析,首先要做的就是将散落在各个业务系统中日志收集起来。

笔者一直好奇这些日志收集框架是怎么做到将日志聚合在一起,于是乎百度了一下,发现Flume这个玩意。 就这样带着好奇心,开始了源代码阅读之路

  • 之前也断断续续的读过一些源码,但是什么也没有留下,等会过头再看,感觉什么又都忘了,因此下定决心把看到的一些东西记录下来

  • 在阅读Flume的过程中,发现Flume的整体架构还是非常清晰的,比较容易理解

怎样阅读源码

对于怎样去读源码,仁者见仁,智者见智,下面仅仅陈述一下我的方法:
这里分为两种情况:

  1. 对于自己已经熟悉的开源框架,那么直接找到源码的地址,下载,编译就好,目前很多的开源框架都有很好的依赖管理工具 类似: Maven Gradle等,直接导入到IDE中就可以

  2. 对于自己不熟悉的框架,比如这次的Flume,首先看一下User Guide 了解一下这个框架是干什么用的,大概会是怎么去使用, 然后去自己尝试一下怎么使用

  3. 对于所有的开源框架 都会有一个入口类,那么怎么去找个这个入口类,一个最简单的方式就是百度一下,一般都会有人告诉你入口类在哪,那么如果是一个全新的框架,在网上找不到那怎么去找呢? 这里又分为两种情况: 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: 一些工具类

0 0