Flume源代码解读三
来源:互联网 发布:淘宝联盟鹊桥 编辑:程序博客网 时间:2024/05/29 04:33
[ 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源代码解读三
- Flume源代码解读一
- Flume源代码解读二
- Flume源代码解读四
- Flume源代码解读五
- linux内核奇遇记之md源代码解读之三
- swift源代码解读(三) proxy-server的启动
- Universal-Image-Loader完全解析(三)---源代码解读
- Universal-Image-Loader完全解析(三)---源代码解读
- linux内核奇遇记之md源代码解读之三
- Flume NG flume-hdfs-sink 源代码分析
- flume 参考文档 (三)
- flume 参考文档 (三)
- flume学习(三)
- flume三:flume Channel selector介绍
- 解读spring源代码心得
- prototype1.3.1源代码解读
- prototype1.3.1源代码解读
- w.song.android.widget.jar使用时常见错误解答
- HDU 3986 Harry Potter and the Final Battle 删除一条边的最长最短路
- Flume源代码解读二
- SQL Server的数据恢复模式为完全模式!导致日志过文件超大!
- android-左右滑动页面设计-仿微信滑动引导页面
- Flume源代码解读三
- The Law of Leaky Abstractions 抽象漏洞定理
- HDU2491(Priest John's Busiest Day)贪心
- 查看Windows操作系统的内核版本
- Flume源代码解读四
- android-仿美丽说有滑动效果的导航栏
- Flume源代码解读五
- 1019. General Palindromic Number_回文数
- Java学习笔记31:Java程序员应该了解的10个面向对象设计原则