Storm tick 功能
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 功能相关推荐
- 关于Storm Tick
转载自kqdongnanf-博客园:Email:kqdongnanf@yahoo.com. 1. tick的功能 Apache Storm中内置了一种定时机制--tick,它能够让任何bolt的所有t ...
- java storm tick ack_关于Storm Tick
转载自kqdongnanf-博客园:Email:[email protected] 1. tick的功能 Apache Storm中内置了一种定时机制--tick,它能够让任何bolt的所有task每 ...
- Flink 在 58 同城的应用与实践
简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink. 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题< ...
- SLA 99.99%以上!饿了么实时计算平台3年演进历程
来自:DBAplus社群 作者介绍 倪增光,饿了么BDI-大数据平台研发高级技术经理,曾先后就职于PPTV.唯品会.15年加入饿了么,组建数据架构team,整体负责离线平台.实时平台.平台工具的开发和 ...
- Cisco二层交换机协议配置详细步骤和作用
Cisco二层交换机协议配置详细步骤和作用 以下是常见的Cisco二层交换机协议配置详细步骤和作用: 配置VLAN • 进入全局配置模式:config terminal • 创建VLAN:vlan & ...
- UE5(虚幻5)如何实现每隔5秒执行一次事件
记录一下今天学习的收获.... 今天一直想找办法实现每5秒就执行一次刷新控件蓝图的功能,一开始想的很简单,蓝图不是自带有"事件Tick"功能吗?那我给它设个延迟(delay),5秒 ...
- 扩展的应用范围 ios_使用插件扩展iOS应用
扩展的应用范围 ios App extensions or plug-ins are very common for desktop apps. Web browsers offer a big se ...
- pygame中time模块方法详解
目录 系统方法 pygame.time.get_ticks() pygame.time.wait() pygame.time.delay() pygame.time.set_timer() pygam ...
- 屏蔽storm ui的kill功能
今天有个storm的topology被人kill掉了,但是找不到是谁做的,storm的ui有kill topology的功能,但是没有权限验证,这样就导致知道ui地址的任何人都可以kill掉topol ...
最新文章
- python使用正则表达式抽取字符串中最大数值数字
- mysql 的 VARCHAR VARCHAR2
- ajax mysql项目 react_React16时代,该用什么姿势写 React ?
- 正则表达式不包含某个字符串_JMeter必知必会系列(18) JMeter正则表达式提取器疑难分析...
- Struts2请求处理的内部流程说明(版本二)
- 高中python公开课怎么上好_如何上好高中英语公开课
- Pentium 4处理器架构/微架构/流水线 (10) - NetBurst执行核详解 - 高速缓存/数据预取
- 浅析GitLab Flow的十一个规则
- SVN仓库解决APIcloud2检出错误
- python面试笔试题
- 2016(第三届)智能家居世界大会
- magedu.N45019第一周作业
- Session 钝化机制
- mysql sphinx_Sphinx的安装和使用(仅学习)
- synchronized.1
- 小米米家冰箱对开门尊享版 540L 评测
- 树莓派语音控制开关灯
- 机器学习笔记(五)逻辑回归 、决策边界、OvR、OvO
- 11家共享单车可通过支付宝免押骑车,这种省钱的方法你get了吗?
- 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)
热门文章
- tft lcd驱动参数详解_LED拼接屏和LCD拼接屏的区别
- php设置路径别名,react设置文件路径别名的具体方法你知道么
- java 小题目_java一个小题目
- idea 编译spring_Spring 源码阅读环境的搭建
- java selenium_selenium 常见面试题以及答案(Java版)
- JAVA进阶教学之(Object类的toString方法)
- python如何实现选项功能_python几种常用功能如何实现 python几种常用功能实现代码实例...
- python 决策树 字符型_Python判断字符串是否xx开始或结尾的示例
- caged系统pdf_建筑行业单词中英文对照教材.pdf
- 如何侦听网线数据_网络工程师 | 七类网线水晶头又如何制作?