storm定时任务【tick】
- 继承BaseBasicBolt
- getComponentConfiguration方法设置发送ticktuple间隔时间(单位s)
- execute方法判断tuple类型,如果为ticktuple处理定时任务,如果不是处理其他任务。
//继承 BaseBasicBolt
public class CountTickBolt extends BaseBasicBolt {
private static final Logger logger = LoggerFactory.getLogger(CountTickBolt.class);
private Map<String, Integer> count;
private Long time; @Override
public Map<String, Object> getComponentConfiguration() {
//设置发送ticktuple的时间间隔
Config conf = new Config();
conf.put(conf.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 5);
return conf;
} @Override
public void prepare(Map stormConf, TopologyContext context) {
super.prepare(stormConf, context);
count = new HashMap<String, Integer>();
time = System.currentTimeMillis();
} @Override
public void cleanup() {
super.cleanup();
} @Override
public void execute(Tuple input, BasicOutputCollector collector) {
//判断是否为tickTuple
if (input.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID) &&
input.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)){
//是,处理定时任务
Long nowTime = System.currentTimeMillis();
Long useTime = nowTime - time;
StringBuffer sb = new StringBuffer();
sb.append("======== Use Time :" + useTime + "========\r\n");
for (Map.Entry wordCount : count.entrySet()){
sb.append(wordCount.getKey() + "------>" + wordCount.getValue() + "\r\n");
}
Long nnTime = System.currentTimeMillis();
logger.info(sb.toString() + (nnTime - nowTime) );
time = nnTime;
}else {
//否,处理其他数据
String word = input.getString(0);
if (count.containsKey(word)){
int thisWordCont = count.get(word);
count.put(word, ++thisWordCont);
}else {
count.put(word,1);
}
}
} @Override
public void declareOutputFields(OutputFieldsDeclarer declarer) { }
- 如何设置此拓扑中所有的spout和bolt都定时处理。
- 由于是tuple类型数据,当正常tuple数据量过大时是否会造成tickTuple延时消费。
storm定时任务【tick】的更多相关文章
- Storm编程入门API系列之Storm的定时任务实现
概念,见博客 Storm概念学习系列之storm的定时任务 Storm的定时任务,分为两种实现方式,都是可以达到目的的. 我这里,分为StormTopologyTimer1.java 和 Sto ...
- Storm编程入门API系列之Storm的Topology的stream grouping
概念,见博客 Storm概念学习系列之stream grouping(流分组) Storm的stream grouping的Shuffle Grouping 它是随机分组,随机派发stream里面的t ...
- Storm编程入门API系列之Storm的可靠性的ACK消息确认机制
概念,见博客 Storm概念学习系列之storm的可靠性 什么业务场景需要storm可靠性的ACK确认机制? 答:想要保住数据不丢,或者保住数据总是被处理.即若没被处理的,得让我们知道. publi ...
- Spark Streaming笔记——技术点汇总
目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...
- Spark学习笔记(三)-Spark Streaming
Spark Streaming支持实时数据流的可扩展(scalable).高吞吐(high-throughput).容错(fault-tolerant)的流处理(stream processing). ...
- Storm框架:如何实现crontab定时任务
Storm除了能对消息流进行处理,还能实现crontab定时任务. 只要在bolt中配置TOPOLOGY_TICK_TUPLE_FREQ_SECS项即可实现. @Override public Map ...
- 关于Storm tick
关于Storm tick 1. tick的功能 Apache Storm中内置了一种定时机制——tick,它能够让任何bolt的所有task每隔一段时间(精确到秒级,用户可以自定义)收到一个来自__s ...
- Storm中的定时任务
1.全局定时器 import java.util.Map; import backtype.storm.Config; import backtype.storm.Constants; import ...
- storm的定时任务
应用场景: 第一种方法 参考代码StormTopologyTimer1.java package yehua.storm; import java.util.Map; import org.apach ...
随机推荐
- USACO Section 1.1-1 Your Ride Is Here
USACO 1.1-1 Your Ride Is Here 你的飞碟在这儿 众所周知,在每一个彗星后都有一只UFO.这些UFO时常来收集地球上的忠诚支持者.不幸的是,他们的飞碟每次出行都只能带上一组支 ...
- Oracle的登陆问题和初级学习增删改查(省略安装和卸载)
1:学习Oracle首先需要安装Oracle,网上已经有很多很多教程了,这里不做叙述,自己百度即可,这里安装的标准版,个人根据需求安装学习或者企业开发即可.如果安装出错,自己百度Oracle的卸载即可 ...
- git的使用及常用命令
一,GIT是什么? git是目前世界上最先进的分布式版本控制系统 Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在 ...
- 破解Linux系统开机密码
在我们使用Linux虚拟机的时候,经常会忘记自己设置的开机密码,无奈之下只有重新建一个虚拟机,然而新建往往会浪费掉我们很多时间,这时候,知道如何破解Linux系统密码就显得很重要了. 下面我们使用bo ...
- Python全栈之路-Day32
1 类的__slots__ #!/usr/bin/env python # __Author__: "wanyongzhen" # Date: 2017/4/25 # 只能定义__ ...
- CSS3弹性伸缩布局(下)——flex布局
新版本 新版本的flex布局模型是2012年9月提出的工作草案,这个草案是由W3C推出的最新语法,这个版本立志于指定标准,让新式的浏览器全面兼容,在未来的浏览器更新换代中实现统一. 目前几乎大部分的浏 ...
- 基于CSS的个人网页
前端时间做的CSS作业:基于CSS的个人网页 基于CSS的个人网页 效果图: 代码: <!DOCTYPE html> <html> <head> <meta ...
- poj2502最短路!
have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of getting to ride ...
- IOS(二)基本控件UIButton、简易动画、transform属性、UIImageView
UIButton //1.设置UIButton 的左右移动 .center属性 获得 CGPoint 来修改x y //1.设置UIButton 的放大缩小 bounds属性 获得CGRect 然后通 ...
- Docker - 生成镜像
利用docker commit命令生成镜像 Docker镜像是多层存储,每一层是在前一层的基础上进行的修改.而容器是镜像为基础层的多层存储. 如果不使用数据卷,运行一个容器的时候,对任何文件的修改都会 ...