今天碰到了一个实时处理丢数据的问题。
技术栈使用的是Kafka + Spark Streaming + pgsql。
首先确认kafka没有丢数据,也没有堆积数据;之后看了Spark Streaming处理逻辑,代码中也没做过滤,可数据就是少了。就很懵逼。
排查了很久,突然想起来可能是服务器时间不对导致的问题,结果发现真是。
因为在Spark Streaming处理中,用到了批对应的batchtime,这个时间就是系统的时间,所以导致很多数据不能成功写入。
教训:
- 写代码尽量少依赖操作系统的时间
- 出现莫名其妙的问题时,应优先从服务器部署层面开始排查,而不是直接去看代码
- 使用ntp来确保服务器的时间同步