转载自:http://blog.sae.sina.com.cn/archives/5109

滑动窗口在监控和统计应用的场景比较广泛,比如每隔一段时间(10s)统计最近30s的请求量或者异常次数,根据请求或者异常次数采取相应措施;这里说一下滑动窗口在storm中实现的原理。参见下图:

窗口大小为30s,每10s就统计一次,那么窗口一共有3个slot,可以对窗口建立长度为3的数组;在storm的blot中在10s内通过execute(tuple)功能不停的把接收的tuple进行count个数(假如内置变量为tuple_count),每10s会自动触发滑动窗口的移动工作(Array[slot3]=》Array[slot2],Array[slot2]=》Array[slot1]),并存储当前tuple_count值到Array[slot3] ,随之可以进行统计窗口的数据了。

那么如何每10s进行自动触发,storm有一个TickTuple可以满足这个要求,

“__system” component会定时往task发送 “__tick” stream的tuple
发送频率由TOPOLOGY_TICK_TUPLE_FREQ_SECS来配置, 可以在default.ymal里面配置
也可以在代码里面通过getComponentConfiguration()来进行配置,

1
2
3
4

public Map < String , Object > getComponentConfiguration ( ) {
Map < String , Object > conf = new HashMap < String , Object > ( ) ;
conf . put ( Config . TOPOLOGY_TICK_TUPLE_FREQ_SECS , emitFrequencyInSeconds ) ;
return conf ;

配置完成后, storm就会定期的往task发送ticktuple

只需要通过isTickTuple来判断是否为tickTuple, 就可以完成定时触发的功能

1
2
3
4
5
6

public static boolean isTickTuple ( Tuple tuple ) {
return tuple . getSourceComponent ( ) . equals ( Constants . SYSTEM_COMPONENT_ID )
\ \ SYSTEM_COMPONENT_ID == "__system"
&& tuple . getSourceStreamId ( ) . equals ( Constants . SYSTEM_TICK_STREAM_ID ) ;
\ \ SYSTEM_TICK_STREAM_ID == "__tick"
}

【转】动窗口在storm中的实现相关推荐

  1. tmux/screen里面如何用鼠标滚轮来卷动窗口内容

    tmux里面用鼠标滚轮来卷动窗口内容 在 tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的Shift+PgUp/PgD ...

  2. 动窗口的制作暨CSizingControlBar类的使用说明

    动窗口的制作暨CSizingControlBar类的使用说明   ***********************************************************   本文在实现 ...

  3. Storm中的Window机制

    2019独角兽企业重金招聘Python工程师标准>>> 上星期在学习计算机网络的运输层时,发现TCP协议中有window机制,看完之后觉得概念有相通之处,如果懂了再去看storm中的 ...

  4. C++:Leetcode-滑动窗口-904.水果成篮

    C++:Leetcode-滑动窗口-904水果成篮 重点掌握滑动窗口思想,左指针和右指针分别代表的含义 重点掌握熟悉利用哈希表进行统计和查重. 面对这种同类型数量统计问题或者是查重问题,哈希表是不二之 ...

  5. Storm精华问答 | Kafka在Storm中的角色是什么?

    戳蓝字"CSDN云计算"关注我们哦! Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop.随着越来越多的场景对Hadoop的MapReduce高 ...

  6. linux查看正在运行的窗口,获取linux中打开的应用程序窗口的数量

    我想检测由窗口管理器管理的特定应用程序的实例数量.目前,我有这个: #!/bin/bash # wmctrl required pids=$(pidof $1) IFS=' ' read -a pid ...

  7. 在storm中使用定时保存

    在storm中使用实时保存会对性能带来很大的考验,所以在很多场景中还是使用定时保存:而且storm自带了定时功能,使用方式如下: 首先在topo中的config中定义一个通信时间,定义方式如下: co ...

  8. Storm中Topology、Worker、Executor和Task的关系

    Storm中Topology.Worker.Executor和Task的关系,如图: 1.1个Topology对应1个或多个Worker进程,1个Worker进程只属于1个Topology 2.1个W ...

  9. storm中worker、executor、task之间的关系

    这里做一些补充: worker是一个进程,由supervisor启动,并只负责处理一个topology,所以不会同时处理多个topology. executor是一个线程,由worker启动,是运行t ...

最新文章

  1. 详解Apache下.htaccess文件常用配置
  2. 获取多张表中的数据_趣说:什么是数据结构和算法
  3. wxWidgets:wxTaskBarIcon类用法
  4. Git Gitlab 使用指南之TortoiseGit
  5. 关于买伞时直径的选择
  6. linux 运行jupyter,在 Linux 上安装并运行 Jupyter
  7. where 子句用于指定类型约束
  8. cocos2d-JS (四)如何学习
  9. Microsoft Visio 画图遇到的问题及解决办法
  10. JS实现新年倒计时动画特效+音乐案例
  11. origin数据平滑_Origin平滑曲线的使用方法
  12. 向技术大牛进击!!——计算机编程进修动员大会
  13. python实现抢票github_抢票神器成GitHub热榜第一,支持候补抢票,Python跑起来
  14. Pytorch官方教程练习之数据加载和处理
  15. 标准立方米的单位换算
  16. 二.linux应用网络编程之文件属性
  17. JAVA中高访问量高并发的问题的一部分解决方案
  18. FJNU第二十二届低年级程序设计竞赛题解
  19. TikTok Shop 2023年增长战略:更多场域、更精细化,跨境商家必须掌握这几个重大信号!
  20. p5.js之动态魔幻画板

热门文章

  1. PonyORM教程1 连接,声明和查询
  2. Google Pixel 3玩机教程
  3. 蓝牙锁定计算机,Windows10创意者如何启用动态蓝牙锁功能?
  4. OKhttp Rejecting re-init on previously-failed class Failed resolution of: Lorg/conscrypt/Conscrypt
  5. 对假虎照指证不表态 政府公信力面临危机
  6. C#--SelectedIndexChanged事件, SelectedValueChanged事件和SelectionChangeCommitted事件的区别及联系
  7. 中电金信:数字化转型|银行业数据中心数字化转型之驱动篇
  8. 虚拟内存与物理内存的联系与区别
  9. 日均100w次登陆请求, 8G 内存该如何设置JVM参数?
  10. 淘宝天猫主图视频分类下载技巧及步骤