需求:消费kafka数据生成TXT文件推送给FTP;
实现处理:
该数据用一个全局list接收,从kafka消费数据后写入该list,后由定时器定时写入文件推送;
遇到的问题及解决方案:
1.由于list被写入文件时,kafka可能同时在往里面写数据,故使用synchronized(list){
写入文件及推送FTP处理;
}
2.在处理数据写入流时,使用的增强for循环,导致报错concurrentModificationException:null
各种查阅问题后,将增强for循环改为for(int i = 0; i < list.size(); i++)后解决;
3.FTP推送处理时,为了实现“传输过程中用.tmp,完成后用.txt”的需求,直接使用.tmp后缀文件上传,上传成功后修改.tmp为.txt;本地测试正常,但在实际场景中,除了生成所需的.txt文件,还会生成后缀.tmp.unimastmp的临时文件,查不到相关资料,做了简单粗暴的处理,上传成功后,对后缀“.tmp”和“.tmp.unimastmp”执行deleteFile操作。(做记录,看后续是否有高级一点的解决方法)



