背景
参与项目有关数据采集,采集数据同步到数据库之前是使用sql的形式去进行同步,考虑到全表同步数据时数据量过大导致mybatis批量插入数据内存异常,原始解决方案采取分批次进行导入,但是同步数据速度相对会比较慢。这块已经达到性能的瓶颈相对来说优化的点很少
解决方案
采用消息中间件KAFKA结合Doris Routine load 例行任务进行数据同步,Kafka 是每秒几十万条消息吞吐对于大数据量处理上面性能比较好。而且它能进行部分时间内的数据保留,以及它单分区内能按顺序消费,也便于我们对后续数据同步出现问题做响应的处理。
Kafka 结合Doris Routine load 支持导入的格式csv, json 文本格式,我们这边采用csv 它相比与JSON来说粒度更细,更便于我们在数据同步时针对于出错数据做处理
流程图
批次号的解释:
相当于我有一个瓶子A现在往里面倒水倒满了就停然后换个瓶子B继续倒倒一半停了,我再换个瓶子C倒满再换瓶子D瓶子ABCD分布就对应批次号ABCD
模型:
这是我们导入数据的一种方式,每个业务数据采集对应一个采集模型
针对于导入出现异常的处理
这点主要利用kafka的一个偏移量offset去处理,主要针对两块进行处理,一块是重新导入(是当数据导入时导入数据的格式与数据库表的格式对应不上跳过这部分数据重新导入),第二块是继续导入(当导入数据的长度等大于数据库表字段长度时,保留数据修改数据库表后再次导入数据)。
流程图
这两块的配置具体可以参考doris routine load 中的配置可以实现