1. tick的功能

Apache Storm中内置了一种定时机制——tick,它能够让任何bolt的所有task每隔一段时间(精确到秒级,用户可以自定义)收到一个来自__systemd的__tick stream的tick tuple,bolt收到这样的tuple后可以根据业务需求完成相应的处理。

2017-06-20 14:39:08.100 STDIO [INFO] 我是定时执行任务pipade,消息为:source: __system:-1, stream: __tick, id: {}, [10]

2. 在代码中使用tick及其作用

在代码中如需使用tick,可以参照下面的方式

2.1. 为指定bolt设置tick

希望某个bolt每隔一段时间做一些操作,那么可以将bolt继承BaseBasicBolt/BaseRichBolt,并重写getComponentConfiguration()方法。
在方法中设置Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS的值,单位是秒。

Config config=new Config();
config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);

getComponentConfiguration()是org.apache.storm.topology.IComponent接口中定义的方法,在该方法定义此Bolt特定的Config

@Override
public Map<String, Object> getComponentConfiguration() {// TODO Auto-generated method stubConfig config=new Config();config.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);return config;
}

-这样设置之后,此bolt的所有task都会每隔一段时间收到一个来自__systemd的__tick stream的tick tuple,因此execute()方法可以实现如下:

@Override
public void execute(Tuple input) {// TODO Auto-generated method stubif (input.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID)|| input.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)) {this.outputCollector.ack(input);System.out.println("我是定时执行任务pipade,消息为:"+input.toString());return;}//收到正常的Tuple,正常处理逻辑...
}

2.2. 为Topology全局设置tick

若希望Topology中的每个bolt都每隔一段时间做一些操作,那么可以定义一个Topology全局的tick,同样是设置Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS的值:

//在main函数启动中设置
Config conf = new Config();
conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 10);
StormSubmitter.submitTopology("wordcount-online", conf, builder.createTopology());

2.3. tick设置的优先级

与Linux中的环境变量的优先级类似,storm中的tick也有优先级,全局tick的优先级低于局部Bolt定义的tick,即两个同时存在以局部为准,否则以全局为准。

这个参数的名字TOPOLOGY_TICK_TUPLE_FREQ_SECS具有一定的迷惑性,一眼看上去应该是Topology全局的,但实际上每个bolt也可以自己定义。

2.4. tick的精确度

Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS是精确到秒级的。例如某bolt设置
Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS为10s,理论上说bolt的每个task应该每个10s收到一个tick tuple。

实际测试发现,这个时间间隔的精确性是很高的,一般延迟(而不是提前)时间在1ms左右。测试环境:3台虚拟机做supervisor,每台配置:4Cpu、16G内存、千兆网卡。

3. storm tick的实现原理

在bolt中的getComponentConfiguration()定义了该bolt的特定的配置后,storm框架会在TopologyBuilder.setBolt()方法中调用bolt的getComponentConfiguration()方法,从而设置该bolt的配置。

调用路径为:TopologyBuilder.setBolt()-> TopologyBuilder.initCommon()-> getComponentConfiguration()

注:当topologyDeactivate时,tick任务还是依然执行

Storm tick 功能相关推荐

  1. 关于Storm Tick

    转载自kqdongnanf-博客园:Email:kqdongnanf@yahoo.com. 1. tick的功能 Apache Storm中内置了一种定时机制--tick,它能够让任何bolt的所有t ...

  2. java storm tick ack_关于Storm Tick

    转载自kqdongnanf-博客园:Email:[email protected] 1. tick的功能 Apache Storm中内置了一种定时机制--tick,它能够让任何bolt的所有task每 ...

  3. Flink 在 58 同城的应用与实践

    简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink. 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题< ...

  4. SLA 99.99%以上!饿了么实时计算平台3年演进历程

    来自:DBAplus社群 作者介绍 倪增光,饿了么BDI-大数据平台研发高级技术经理,曾先后就职于PPTV.唯品会.15年加入饿了么,组建数据架构team,整体负责离线平台.实时平台.平台工具的开发和 ...

  5. Cisco二层交换机协议配置详细步骤和作用

    Cisco二层交换机协议配置详细步骤和作用 以下是常见的Cisco二层交换机协议配置详细步骤和作用: 配置VLAN • 进入全局配置模式:config terminal • 创建VLAN:vlan & ...

  6. UE5(虚幻5)如何实现每隔5秒执行一次事件

    记录一下今天学习的收获.... 今天一直想找办法实现每5秒就执行一次刷新控件蓝图的功能,一开始想的很简单,蓝图不是自带有"事件Tick"功能吗?那我给它设个延迟(delay),5秒 ...

  7. 扩展的应用范围 ios_使用插件扩展iOS应用

    扩展的应用范围 ios App extensions or plug-ins are very common for desktop apps. Web browsers offer a big se ...

  8. pygame中time模块方法详解

    目录 系统方法 pygame.time.get_ticks() pygame.time.wait() pygame.time.delay() pygame.time.set_timer() pygam ...

  9. 屏蔽storm ui的kill功能

    今天有个storm的topology被人kill掉了,但是找不到是谁做的,storm的ui有kill topology的功能,但是没有权限验证,这样就导致知道ui地址的任何人都可以kill掉topol ...

最新文章

  1. python使用正则表达式抽取字符串中最大数值数字
  2. mysql 的 VARCHAR VARCHAR2
  3. ajax mysql项目 react_React16时代,该用什么姿势写 React ?
  4. 正则表达式不包含某个字符串_JMeter必知必会系列(18) JMeter正则表达式提取器疑难分析...
  5. Struts2请求处理的内部流程说明(版本二)
  6. 高中python公开课怎么上好_如何上好高中英语公开课
  7. Pentium 4处理器架构/微架构/流水线 (10) - NetBurst执行核详解 - 高速缓存/数据预取
  8. 浅析GitLab Flow的十一个规则
  9. SVN仓库解决APIcloud2检出错误
  10. python面试笔试题
  11. 2016(第三届)智能家居世界大会
  12. magedu.N45019第一周作业
  13. Session 钝化机制
  14. mysql sphinx_Sphinx的安装和使用(仅学习)
  15. synchronized.1
  16. 小米米家冰箱对开门尊享版 540L 评测
  17. 树莓派语音控制开关灯
  18. 机器学习笔记(五)逻辑回归 、决策边界、OvR、OvO
  19. 11家共享单车可通过支付宝免押骑车,这种省钱的方法你get了吗?
  20. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)

热门文章

  1. tft lcd驱动参数详解_LED拼接屏和LCD拼接屏的区别
  2. php设置路径别名,react设置文件路径别名的具体方法你知道么
  3. java 小题目_java一个小题目
  4. idea 编译spring_Spring 源码阅读环境的搭建
  5. java selenium_selenium 常见面试题以及答案(Java版)
  6. JAVA进阶教学之(Object类的toString方法)
  7. python如何实现选项功能_python几种常用功能如何实现 python几种常用功能实现代码实例...
  8. python 决策树 字符型_Python判断字符串是否xx开始或结尾的示例
  9. caged系统pdf_建筑行业单词中英文对照教材.pdf
  10. 如何侦听网线数据_网络工程师 | 七类网线水晶头又如何制作?