背景
我们是一家服务于农业的互联网公司,有这么一个业务场景,我们要把动物存栏数实时显示在大屏上,这些存栏数据又按照组织、动物的状态等方面进行分类。如果直接从数据库中(Postgresql)查询,如存在以下问题:
1、跨中心(跨数据库)查询
2、大屏每隔几秒刷新数据,过多的join、横表转纵表操作,会加大Postgresql查询的压力
因此,我们使用Streamsets来进行实时打宽表,来解决以上问题。
方案
过程:实时采集Postgresql的wal日志,根据需求进行数据处理,写入到Snappydata的表。
数据采集
数据采集
使用Postgresql CDC Client采集日志,使用Jython将日志解析成json数据,然后写入到kafka中。详细内容请参考实时数据同步https://www.jianshu.com/p/6f94cd7bce35
写入到kafka中的数据(档案表)形式为
{"id":645986949249966087,"create_user":"1191899847279063041","modify_user":"1191899847279063041","create_time":"2019-11-18 14:01:30.558","modify_time":"2020-01-08 13:54:55.789116","app_id":502,"tenant_id":626804036418404352,"org_id":641585797362876416,"deleted":false,"kind":"update","table":"********","schema":"********"}
数据处理
需求:
1、根据org_id查询人力中心的数据
2、根据档案表的ID,查询生物中心该动物的状态信息
分析:
使用Streamsets完成这个需求,首先你要了解数据是怎么在Streamsets进行传输的,如果你还不了解,也不用担心,下面我将详细进行介绍。
实时宽表
未完待续