alibaba / canal

阿里巴巴 MySQL binlog 增量订阅&消费组件
Apache License 2.0
28.44k stars 7.6k forks source link

es adapter不稳定 #2457

Open rockingfire1 opened 4 years ago

rockingfire1 commented 4 years ago

es adapter一般运行1天左右就会不再往es里面写数据,虽然能接收到数据,但同时会报sql错误。 如果此时在adapter的conf目录下,vi application.yml不作任何修改并保存,es adapter的日志显示不再报语法错误,且开始往es里面写数据。

报错日志如下: 2019-12-09 18:37:09.169 [pool-100-thread-1] ERROR com.alibaba.otter.canal.client.adapter.support.Util - sqlRs has error, sql: select concat(database(),'_','ccust','',a.id) as _id,a.id,database() as db, 'c_cust' as 'table' ,a.date_created from c_cust a WHERE a.id=63323878
2019-12-09 18:37:09.169 [pool-100-thread-1] ERROR c.a.otter.canal.client.adapter.es.service.ESSyncService - sync error, es index: ods_origin, DML : Dml{destination='cust', database='cust', table='c_cust', type='INSERT', es=1575887828000, ts=1575887829163, sql='', data=[{id=63323878, cust_no=CT123456789784564, cust_name=aaaa, id_type=1, id_no=12345678912, sex=M, birthday=1900-07-11, cust_state=1, date_created=2019-12-09 18:37:08.0, created_by=sys, date_updated=2019-12-09 18:37:08.0, updated_by=sys}], old=null} 2019-12-09 18:37:09.169 [pool-100-thread-1] ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.sync(ESSyncService.java:110) at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.sync(ESSyncService.java:58) at com.alibaba.otter.canal.client.adapter.es.ESAdapter.sync(ESAdapter.java:169) at com.alibaba.otter.canal.client.adapter.es.ESAdapter.sync(ESAdapter.java:148) at com.alibaba.otter.canal.adapter.launcher.loader.AbstractCanalAdapterWorker.batchSync(AbstractCanalAdapterWorker.java:201) at com.alibaba.otter.canal.adapter.launcher.loader.AbstractCanalAdapterWorker.lambda$null$1(AbstractCanalAdapterWorker.java:62) at java.util.ArrayList.forEach(ArrayList.java:1257) at com.alibaba.otter.canal.adapter.launcher.loader.AbstractCanalAdapterWorker.lambda$null$2(AbstractCanalAdapterWorker.java:58) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.NullPointerException at com.alibaba.otter.canal.client.adapter.support.Util.sqlRS(Util.java:45) at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.mainTableInsert(ESSyncService.java:465) at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.insert(ESSyncService.java:137) at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.sync(ESSyncService.java:93) ... 11 common frames omitted Caused by: java.lang.RuntimeException: java.lang.NullPointerException at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.lambda$mainTableInsert$3(ESSyncService.java:482) at com.alibaba.otter.canal.client.adapter.support.Util.sqlRS(Util.java:41) ... 14 common frames omitted Caused by: java.lang.NullPointerException: null 2019-12-09 18:37:09.169 [Thread-24] ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - Outer adapter sync failed! Error sync but ACK!

lyl8213 commented 4 years ago

我也遇到了,求解答 @agapple

MistRay commented 4 years ago

用的是1.1.4版本么?

sshfengfeng commented 4 years ago

ESTemplate.commit() 中 , 如果走到了 throw new RuntimeException("ES sync commit error" + itemResponse.getFailureMessage()); ,会导致没有 resetBulkRequestBuilder(); 。你可以改一下这里试试,加上finally resetBulkRequestBuilder(); 原因可能是某一次提交里的某一行数据有问题,出错了,但是因为没有resetBulk,下次提交的数据里还是会有这行错误的数据,导致后面的每次提交都有异常。

caoyingde commented 1 year ago

ESTemplate.commit() 中 , 如果走到了 throw new RuntimeException("ES sync commit error" + itemResponse.getFailureMessage()); ,会导致没有 resetBulkRequestBuilder(); 。你可以改一下这里试试,加上finally resetBulkRequestBuilder(); 原因可能是某一次提交里的某一行数据有问题,出错了,但是因为没有resetBulk,下次提交的数据里还是会有这行错误的数据,导致后面的每次提交都有异常。

我也遇到了,最终解决了吗?

caoyingde commented 1 year ago

我也遇到了,最终解决了吗?

caoyingde commented 1 year ago

会不再往es里面写数据,虽然能接收到数据,但同时会报sql错误。 如果此时在adapter的conf目录下,vi application.yml不作

我也遇到了,请问最终解决了吗?