从双十一以后投入到项目中去,12月底差不多完成,1月份已经完全上线了,觉得应该总结总结项目了。
这次这个项目是利用大数据平台进行实时计算的技术方案,之前没做过,学到了不少东西。
整体架构
模块
数据接入
数据通过大数据平台将mysql binlog日志通过kafka消息推送。表每天数据量2-300万。接入数据需要做到无积压,实时消费,目前差不多每秒100条数据的速度,每小时50*60*60大约18万数据量毫无压力。
1.通过数据库配置,做到配置的表才会接入数据;
2.通过数据库配置,做到更新不必要的字段过滤数据;
3.程序自动过滤非新增、非更新的操作;
4.程序通过配置开关,做到可以重置位点重新消费数据;
5.通过使用高级消费者,做到批量提交数据到数据库并保证在程序异常未插入数据库不提交位点保证数据一致性。
宽表合并
1.通过数据库配置,做到灵活控制是否更新所有数据到宽表还是部分数据到宽表;
2.通过数据库配置,做到灵活控制宽表字段来源(直接数据,接口返回值,子查询结果),计算结果可以是直接值或者json串,json串可以获取里面字段值;
3.通过数据库配置,做到灵活控制宽表字段是通过表达式计算结果;
4.对宽表记录主键做分布式锁,保证记录不重复;
5.通过分布式缓存,对宽表主键先查询缓存再查询ES,解决ES延迟问题;
6.通过记录消息号,保证消息顺序;
处理数据
1. 通过分布式任务调度,利用分片和增加时间字段,保证覆盖全数据,每次取出按照时间排序后的任务,处理完时间后延;
2.通过使用策略和装饰者模式实现代码复用。