canal-adapter 无法找到索引(Not found the mapping info of index)索引已经存在,无子文档
- [x] I have searched the issues#1851 of this repository and believe that this is not a useful.
environment
- canal version 1.1.5
- canal-adapter version 1.1.5
- mysql version 5.6
- elasticsearch version 7.X
Issue Description
The Mapping is exists!!

config of canal-adapter es/test_keyword_db.yml
ERROR c.a.otter.canal.client.adapter.es.service.ESSyncService - sync error, es index: test_keyword_db, DML : Dml{destination='test', database='canal_manager', table='test', type='UPDATE', es=1608236866000, ts=1608236866208, sql='', data=[{id=8, title=54841289qqqasdasd, product_description=}], old=[{title=54841289qqq}]}
2020-12-18 04:27:46.233 [pool-3-thread-1] ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterWorker - java.lang.IllegalArgumentException: Not found the mapping info of index: test_keyword_db
java.lang.RuntimeException: java.lang.IllegalArgumentException: Not found the mapping info of index: test_keyword_db
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:1259)
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.IllegalArgumentException: Not found the mapping info of index: test_keyword_db
at com.alibaba.otter.canal.client.adapter.es.support.ESTemplate.getEsType(ESTemplate.java:497)
at com.alibaba.otter.canal.client.adapter.es.support.ESTemplate.getValFromData(ESTemplate.java:345)
at com.alibaba.otter.canal.client.adapter.es.support.ESTemplate.getESDataFromDmlData(ESTemplate.java:410)
at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.singleTableSimpleFiledUpdate(ESSyncService.java:793)
at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.update(ESSyncService.java:206)
at com.alibaba.otter.canal.client.adapter.es.service.ESSyncService.sync(ESSyncService.java:95)
... 11 common frames omitted
Steps to reproduce
MYSQL Binlog file successfully read
Expected behaviour
successful SyncES
Actual behaviour

If there is an exception, please attach the exception trace:
这个问题解决了吗?
使用索引别名时会出现这个问题。 例如: PUT tyredb-s_garage_v1 { "aliases": { "tyredb-s_garage": { "is_write_index": true } } ...
还没解决,我并没有使用别名
这个问题解决了吗?
还没有解决
使用索引别名时会出现这个问题。 例如: PUT tyredb-s_garage_v1 { "aliases": { "tyredb-s_garage": { "is_write_index": true } } ...
我并没有使用别名
现在没报错了,但是也没更新数据
之前看到1.1.4支持ES 6.X.X版本以上,以为也支持ES 7,昨天看到一篇文章说只有1.1.5才支持,想着会不会是版本问题,于是昨天又换了canal-deployer为1.1.5版本,但是依然不行,没报错,但是也没更新ES数据
碰到和你一样的问题,显先是报索引不存在,后来把字段改成大写,不报错了,日志也展示能读到新增数据,但是es中没数据
问题1:es7 报错druid类无法转化
修复:下载原码修改client-adapter.escore中的pom.xml,重新打包替换canal release(1.1.5)下adapter/plugins下的client-adapter.es7x-1.1.5-jar-with-dependencies.jar
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <scope>provided</scope> </dependency>
问题2:1.1.5 adapter 配置es7报错找不到适配器,换成1.1.4的adapter配置为出现一样的现象。
elasticsearch-7.13.3-1.x86_64
java version "1.8.0_211
--Fixed 不更新的原因:es7 安全级别提高需要设置密码,数据同步正常。 warn log [299 Elasticsearch-7.13.3-5d21bea28db1e89ecc1f66311ebdec9dc3aa7d64 "Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html to enable security."]
adapter中配置 - name: es7 hosts: http://127.0.0.1:9200 # 127.0.0.1:9300 for transport 127.0.0.1:9200 for rest mode #key: exampleKey properties: mode: rest #transport # or rest security.auth: elastic:btqZ4jgUDoEK3P28ZZBn # only used for rest mode cluster.name: elasticsearch 正常log: Affected indexes: xxxxx
之前看到1.1.4支持ES 6.X.X版本以上,以为也支持ES 7,昨天看到一篇文章说只有1.1.5才支持,想着会不会是版本问题,于是昨天又换了canal-deployer为1.1.5版本,但是依然不行,没报错,但是也没更新ES数据
问题解决了吗?我也遇到了这个问题,调了一天了一直提示这个错误...
我这是遇到了Not found the mapping info of index: XXX这个问题 canal版本:1.1.4 es版本:7.15.2
把ESConnection类的第137行注释调的代码放开 源代码 // try { // response = restHighLevelClient // .indices() // .getMapping(request, RequestOptions.DEFAULT); // // 6.4以下版本直接使用该接口会报错 // } catch (Exception e) { // logger.warn("Low ElasticSearch version for getMapping"); response = RestHighLevelClientExt.getMapping(restHighLevelClient, request, RequestOptions.DEFAULT); 更改后 try { response = restHighLevelClient .indices() .getMapping(request, RequestOptions.DEFAULT); // 6.4以下版本直接使用该接口会报错 } catch (Exception e) { logger.warn("Low ElasticSearch version for getMapping"); // response = RestHighLevelClientExt.getMapping(restHighLevelClient, request, RequestOptions.DEFAULT);
同时下面147行IOException改为Exception
以上操作完后再次install,重新运行,问题得以解决
问题解决了吗?我也遇到了这个问题,调了一天一直提示这个错误...
可以试一下我的解决方案
问题解决了吗?我也遇到了这个问题,调了一天一直提示这个错误...
可以试一下我的解决方案
解决了,我遇到的是连接ES失败,所以一直提示索引不存在.处理了连接问题之后就可以了.
问题解决了吗?我也遇到了这个问题,调了一天一直提示这个错误...
可以试一下我的解决方案
解决了,我遇到的是连接ES失败,所以一直提示索引不存在.处理了连接问题之后就可以了.
怎么解决的连接问题?