[ xcly原创于iteye,见http://xcly.iteye.com ]
本节重点介绍 agentSink中ENDTOEND的实现。
每一个节点通过source获得事件Event,然后由sink处理,sink同source一样,flume提供了多种实现,sink的生成同Flume源代码解读一中介绍的实现方式类似,由SinkFactory工厂方法实现,跟SourceFactory不一样的是定义了取得SinkDecoBuilder的抽象方法,在SinkFactoryImpl中不止通过name可以获得EventSink,也可以获得EventSinkDecorator,关键点是EventSinkDecorator也是EventSink.Base的子类。这种装饰器模式的实现方式給事件的处理方式提供了类似于管道流的一种实现,我们可以将任意EventSinkDecorator串成一个管道,用来对事件进行加工和处理。
我们看ENDTOEND的实现,就是一串ackedWriteAhead => { stubbornAppend => { insistentOpen =>rpcSink,由FlumeBuilder的buildSink实现。 这里使用了强大的语言识别工具Antlr, 具体实现细节还有待深究。
下次补上。
ackedWriteAhead 对应的实现类是NaiveFileWALDec, NaiveFileWALDeco是一个非常重要的类, 它里面有两套数据流机制, 一套是RollSink开始的将数据不断写入本地硬盘的数据流,当数据写入本地硬盘后,通过DirectDriver的一个线程不断循环从写好的硬盘数据中获取数据发送至collector,如果写成功,再删除硬盘上的数据。
NaiveFileWALDec的build中申明了几个关键的类是从FlumeNode实例中取得的,NaiveFileWALManager负责数据的持久化,当再次尝试发生时,也读取数据,最初数据都是写入writing目录。 WALAckManager和它之中的PendingAckQueuer, WALAckManager负责act check,并且调用PendingAckQueuer作为结束数据append的动作。 即PendingAckQueuer的end方法。
RollSink的newSink见NaiveFileWALManager的newAckWritingSink方法,AckChecksumInjector嵌套SeqfileEventSink, AckChecksumInjector在event中添加tag/checksum和时间作为校验和,并且对消息body使用了hash算法。 而 SeqfileEventSink主要负责将数据流写入本地文件系统。
未完待续
分享到:
相关推荐
flume 1.8所有源代码 编译通过版 附 maven3.5.2 安装包 解压配置maven,利用命令行进行编译,导入eclipse,可用于源代码查看,搭建flume远程测试环境
flume源码
电商数仓项目(八) Flume(2) 拦截器开发源代码
Flume读取数据库JDBC源程序,这样Flume就可以读取关系型数据作为数据源,通过简单配置即可实现数据库连接
flume1.6 es5.2.2
flume kafka storm集成源代码和文档介绍
Flume1.6.0入门:安装、部署、及flume的案例
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可...
flume-ng安装
http://blog.csdn.net/m0_37739193/article/details/78779052这篇文章中所需的代码
01_Flume的介绍及其架构组成 02_Flume的安装部署 03_Flume的测试运行 04_Flume中配置使用file channel及HDFS sink 05_Flume中配置HDFS文件生成大小及时间分区 06_Flume中配置Spooling Dir的使用 07_Flume中...
尚硅谷大数据技术之Flume
flume集群环境搭建,详细讲解,图文并茂,包括flume信息监控和众多文章链接
flume支持RabbitMQ插件
(3)传递报告间谍信息">让你快速认识flume及安装和使用flume1 5传输数据 日志 到hadoop2 2 中文文档 认识 flume 1 flume 是什么 这里简单介绍一下 它是 Cloudera 的一个产品 2 flume 是干什么的 收集日志的 3 ...
由于Flume的netcatudp为sources,avro为sink时,udp数据发送会报null of map in field headers of org.apache.flume.source.avro.AvroFlumeEvent of array。但是此类解决了这个问题。只需要将此类放在Flume安装的lib...
flume官网下载太慢,请从这里下载,次文件是官方网站的1.8版本,也就是支持jdk1.8的,不支持jdk1.7,如果要支持jdk1.7的,请下载我的资源里面也有,flume1.7,
### 摘要 ...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
参照下图可以看得出Agent就是Flume的一个部署实例, 一个完整的Agent中包含了必须的三个组件Source、Channel和Sink,Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地(这...