以前在hive上做离线计算,进入新公司后,需要产出一些实时的报表,下面对第一次实时数据开发作出记录

需求

主要围绕工单系统数据进行开发,原始工单表中有人员id、部门id、业务线分类id、服务组分类id等字段需要和维表关联出相应的名称,然后将结果写入数据表。需求使用相当于星型模型,一张工单事实表关联人员信息维表、部门id维表、业务线维表、服务组信息维表,将关联结果写入结果表。离线处理中hive针对此类问题每天进行批处理,此处需要进行流式计算

### 方案

工单表中数据量比较小,大概在几十w左右,此处有两个方案

  • 通过java工程实时监听metaq消息,将监听到的每个metaq消息进行解析,然后根据id去数据库中分别查询相关维表匹配得到名称信息,将数据写入结果表

  • 通过公司的st平台从mysql源库中实时读取binlog日志,通过flink平台读取实时数据,然后通过id去数据库中查询相关维表信息,得到数据写入结果表

实施

方案一主要是通过java工程进行实现,主要缺点是代码不可复用性。如果下次有类似任务,还需进行进行繁杂的开发。

方案二利用flink平台进行开发,主要通过sql进行程序编写,简洁快速,该方案更实用。

原理

第一个实时任务

如图所示,可以分为如下几部分:

  1. 通过st平台读取业务库binlog日志,此方法不需要直接连接数据库,不影响数据库性能

  2. 通过flink平台读取st流信息,对流入的每条记录从mysql库中读取相关维表根据id进行匹配。此处维表有两种方式进行操作,第一种是直接实时从数据库中进行读取,第二种为缓存机制,将维表缓存至内存中,每隔一段时间刷新一次。

  3. 将匹配得到的数据集merge into数据表中。结果表必须有主键字段,如果结果表中存在主键值,采用update形式操作,如果没有则使用insert 操作

总结

流式计算不大适合对流水数据进行实时化,一般适用于短时间内数据统计计算,如计算日pv、uv等指标。像最后一次提交时间、第一次购买数量等指标或字段流式计算无能为力。后续将会对多表join、事件窗口等原理进行学习和总结

相关文章:

  • 2021-09-01
  • 2022-02-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-22
  • 2021-07-07
  • 2022-01-20
猜你喜欢
  • 2021-12-17
  • 2021-12-03
  • 2021-06-25
  • 2022-12-23
  • 2021-10-01
  • 2022-12-23
相关资源
相似解决方案