zoukankan      html  css  js  c++  java
  • bolt继承关系和区别

    先上个图: 

     具体区别:

    IRichBolt/IBasicBolt

    区别IRichBolt和IBasicBolt

    IRichBolt继承自IBolt和IComponent。IBasicBolt继承自IComponent,和IBolt没有继承关系。

    实现IRichBolt的Bolt有:BaseRichBolt,ClojureBolt,CoordinatedBolt,KeyedFairBolt,RichShellBolt等。

    实现IBasicBolt的有:BaseBasicBolt,IdentityBolt,PrepareBatchBolt等。

    他们的区别在于IRichBolt需要手动的ack或fail消息,若不ack,很快就outOfMemory了;而IBasicBolt不需要确认消息,自动完成。

    看下面的OutputCollector和BasicOutputCollector。

    OutputCollector/BasicOutputCollector

    OutputCollector实现了IOutputCollector,方法有:emit,emitDirect,ack,fail。

    BasicOutputCollector实现了IBasicOutputCollector,方法有:emit,emitDirect,reportError。

    可以看到,OutputCollector暴露了emit API给IRichBolt,包括了ack和fail,用来对应消息成功/失败后的处理,可以保证消息不丢失。具体可以看:如何保证消息不丢失

    而BasicOutputCollector没有此api,对应于IBasicBolt。

    IBatchBolt

    顾名思义,批处理的Bolt,与IRichBolt和IBasicBolt也没有继承关系。这个bolt对象每次处理一批batch在一起的tuples。对于每一个tuple调用execute方法。而在整个batch处理完成的时候调用finishBatch方法。然后新来一批tuples,会产生新的batchBolt来处理。

    具体可以见:http://xumingming.sinaapp.com/736/twitter-storm-transactional-topolgoy/

    BatchOutputCollector

    和IBatchBolt对应的Collector

    BaseTransactionalBolt

    事务性的Bolt。

    记住:继承了BaseTransactionalBolt的class在execute方法中获取tuple时,应从下标为1开始获取,第0个为TransactionAttempt对象,为<txid,_attemptId>,用来记录tuples重放时。因为事务性的bolt继承了批处理的bolt,具体还是见IBatchBolt中关于事务性拓扑的链接。

    参考:https://my.oschina.net/u/2300159/blog/382524

  • 相关阅读:
    vb代码控制 Excel锁定单元格
    SendMessage
    vb 中Treeview控件的一些问题!
    NGWS runtime C# 开始学习 第一天 (2006.6.7)
    DTS Transform Data Task的使用
    GetTickCount
    ASP.NET 2.0 中Login控件的使用
    core dump解析(2)
    tcp滑动窗口机制
    linux 查看文件夹大小 du命令
  • 原文地址:https://www.cnblogs.com/51python/p/11020215.html
Copyright © 2011-2022 走看看