背景
做数据拉取服务的平台,之前的代码采用并行流去拉取第三方平台数据,且没有指定线程数;这样做数据量小的时候确实不会出现问题且数据及时性也很不错;但数据量上来了就会出现恐怖的事情!
问题
某天突然发现库里的数据部分更新部分不更新,对未更新的数据去验证又没有问题;排查了一圈发现是OOM导致触发公司的重启机制;
解决方案
原流程图
改版后流程图
对应问题
1、幂等问题:数据库中做了唯一键限制,消息重复消费也可保证数据唯一性,且用的是 **on duplicate key update**不担心报错导致程序终止
2、消息顺序消费问题:保证最终数据准确性即可,不要求顺序,需要保证顺序消费的小伙伴可考虑 hash + 队列方式保证消费顺序