问题描述

1、在流式计算中经常需要对一批的数据进行汇总计算,类似SQL中的GROUP BY。在用JStorm来实现这一条简单的SQL时,面对的是一条一条的数据库变化的消息(这里需要保证有序消费),其实相当于在一堆的消息上面做了一个嵌套的SQL查询,用一张图表示如下:

2、业务DB中的表基本上不会有大宽表,也就是说获取数据时需要从把不同的表进行JOIN才能拿到结果,那么现在的问题是在JOIN的多个表中,任意一个表的数据出现变化都可能影响到最终的结果。也就是说在JStorm中需要针对每个表的变化想好应对的方法:

模型设计

最近看JStorm的接口,在分发消息的部分做了很多策略,我们设计模型的时候可以充分的利用这些策略来规避分布式情况下一些问题:

分布式锁

频繁访问持久化存储(这个操作一般比较慢)

GROUP BY

为了保证执行准确高效,在底层实现的时候需要处理很多细节。步骤:

在spout中监听顺序消息,将消息持久化到ots中。

在spout中根据offset批量读取ots中的数据放到本地队列中,然后在nextTuple中分发出去。

在bolt中根据group key字段接收消息并进行处理(相同的group key在同一个task上执行)。幂等检查(如果是近期产生的数据,直接根据本地缓存判断,否则根据db判断)。

根据主键更新本地缓存中的数据,统计有哪些group key有更新。

定时将本地缓存中的数据批量刷到db,对消息进行ack确认(在spout的内存中统计发送、ack的消息数目)。

定时将有更新的group key刷到db。

在一个版本的所有消息消费成功之后在任务表写入记录。

在spout中监听任务表drc消息。在spout中批量读取有变化的group key并在nextTuple中分发出去。

在bolt中根据group key接收消息,重新计算对应的统计值(max、min等)。

在spout本地统计所有的消息是否被成功消费,完成时在任务表中写入记录。

执行完成。

整体过程如下图:

在整个过程中有互相依赖的三个任务,消息和增量之间并行执行,增量和全量之间串行执行(只有增量执行完成才轮到全量):

JOIN

在联表操作中其实有很多的类型,在实际中有这样一个例子:包裹上有订单ID、包裹ID、拣选单ID,在拣选单上有打印状态,需要求订单对应的拣选单的最小的打印状态,整体的过程如下:

执行的步骤如下:

得到拣选单变化的增量,并将状态合并到拣选单全量表中。

得到包裹增量并合并到增量上面去。

取出拣选单、包裹的增量数据,执行更新操作。对于拣选单,批量更新包裹状态。

对于包裹,更新单条记录。

配置方法

----- updating -----

jstorm mysql_JStorm模型设计相关推荐

  1. jstorm mysql_Jstorm+Spring+mybatis整合

    在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库. 在网上寻找了一下,发现storm集成 ...

  2. jstorm 读取mysql_jstorm运维经验转载

    ##转之jstorm github 官方资料 1:启动supervisor或nimbus最好是以后台方式启动, 避免终端退出时向jstorm发送信号,导致jstorm莫名其妙的退出 nohup jst ...

  3. jstorm 读取mysql_jstorm集成kafka

    本人是spark的拥趸,因为工作中需要用到jstorm,作记录如下. pom.xml com.alibaba.jstorm jstorm-core 2.1.1 provided org.slf4j s ...

  4. 深入实践Spring Boot3.1 模型设计

    3.1 模型设计 数据管理模块实现了MVC中模型的设计,主要负责实体建模和数据库持久化等方面的功能.在本章的实例中,将使用上一章的Neo4j数据库的例子,对电影数据进行管理.回顾一下,有两个节点实体( ...

  5. Cassandra数据模型设计最佳实践

    2019独角兽企业重金招聘Python工程师标准>>> 本文是Cassandra数据模型设计第一篇(全两篇),该系列文章包含了eBay使用Cassandra数据模型设计的一些实践.其 ...

  6. 浅析SAAS数据模型设计(Oracle)

    目前SAAS平台对于大家来说并不陌生,市场上真正属于SAAS应用的并不是特别多,还有很大一部分是ASP的模式在运行,不管对于公司还是技术部门都是很大的挑战.去年在做elearning项目的时候其实也就 ...

  7. 机器学习处理流程、特征工程,模型设计实例

    作者:大树 更新时间:01.14 email:59888745@qq.com 数据处理,机器学习 回主目录:2017 年学习记录和总结 阿里天池 大航杯"智造扬中"电力AI大赛 的 ...

  8. 逻辑模型设计步骤-分析主题域

    对概念模型设计步骤中确定的几个基本主题域进行分析,一并选择首先要实施的主题域.选择第一个主题域所要考虑的是它要足够大,以便使得该主题域能建设成为一个可应用的系统;它还要足够小,以便于开发和较快地实施.

  9. 我的网站搭建: (第一天) 模型设计

    2019独角兽企业重金招聘Python工程师标准>>> 网站已经成功部署好多天了,今天突然发现以前在开发过程中遇到的问题没有被好好的记录下来,或者说是没有被保存.这样肯定是不可取的, ...

最新文章

  1. Android多线程:这是一份全面 详细的线程池(ThreadPool)讲解教程
  2. Redhat5.4 LAMP配置
  3. 影像采集-拍照 (用自己的插件 )简单逻辑
  4. 别被布线“老思想”拌倒
  5. 玩转Mixly – 8、Arduino AVR编程 之 变量
  6. android默认获取敏感权限
  7. Spring Boot(7)---构建系统和依赖管理
  8. ps怎么把图片背景变透明_ps怎么添加背景?ps怎么添加背景图?
  9. SpringBoot实战(五):配置健康检查与监控
  10. 2019Java查漏补缺(二)
  11. Atitit 格式转换的艺术 以excel转换txt为例
  12. 简述结构化程序设计、面向对象程序设计的概念及其区别
  13. 双系统下如何切换到ubantu界面及如何切换到windows界面
  14. MICRO USB引脚定义以及接法
  15. Linux下七种文件类型、文件属性及其查看方法
  16. java高德地图api开发平台_示例中心
  17. 关于元素定位使用class_name定位报错的部分问题Unable to locate element: {“method“:“css selector“
  18. 字符串ASCII码的常用方法
  19. Map接口、HashMap、LinkedHashMap
  20. LSB图像信息隐藏(实现及分析)

热门文章

  1. 测控技术与仪器应该学计算机哪些,测控技术与仪器专业学什么
  2. 计算机辅助测控电路设计报告,测控电路实验报告(20210407082438)
  3. 如何从外网访问本地服务器
  4. qt android usb开发,QT5检测USB设备
  5. java 毫秒转成日期格式_java-将字符串和毫秒值转化为日期格式的几种方法
  6. Arduino与Proteus仿真实例-Nokia3310显示屏驱动仿真
  7. 解决办法:360压缩解压出现空白文件创建失败,但压缩包文件无损坏显示有十几个文件
  8. 浏览器保存网页的四种方式
  9. 雷鸟Thunderbird客户端加密方法
  10. 60 种常用可视化图表,该怎么用?