日志流程改造中遇到的bug

1.kafka输入输出插件的问题

项目中遇到从kafka中获取数据并进行处理,处理后的数据发送到指定的kafka中,在写完kafka输出插件后,单独测试没有问题,但是把插件加在DA框架中就出现了问题,报错输出插件初始化错误

核查过程

将kafka生产者程序梳理一遍,写测试程序,测试时传入指定的topic,username,userpasswd,测试没有问题,排除了生产者程序的问题,显示出错的主要地方是在kafka生产者的配置问题,查看生产者文件的配置文件,果然,因当时conf是复制的消费者的配置文件,文件内部的节点名还是原来的名字,导致生产者初始化错误

 

 

配置文件

 

 

 

2.改造DA架构中写hdfs文件的问题

将kafka中的数据直接落hdfs,为了容错,将生成的文件暂时写到一个临时目录,文件写入完成之后,在将写完的文件move到正式的目录,文件每小时生成一个

问题:在切换文件时,文件被move走之后,新的文件没有生成,而是生成的一个老的文件且没有数据写入

核查过程:

1.跳出DA架构,将move文件的操作单独进行测试

 

 测试文件是可以移动成功的

2.程序中有2个线程对同一个变量做get和set的操作,怀疑是多线程之间的同步问题,在get,set上加锁

 

 加锁之后文件在切换时还是会出现旧文件move走,新文件没有生成的问题

3.在2中发现可能与多线程有关,一个线程负责生成每个小时的文件,另外一个线程负责数据的写入,核查的重点主要集中在这2个线程上,之后发现,move的hdfs对象和write的hdfs对象不是同一个,导致出现以上问题

写程序

 

 生成每小时的文件

 

之后将要move的文件传给写文件的线程,用写线程来判断文件是否需要move

 

posted on 2020-04-10 10:27  mclhyang  阅读(143)  评论(0编辑  收藏  举报

导航