因为数据库中有type字段导致logstash同步到elasticsearch失败的一次经历
问题描述
最近在学习使用logstash工具同步数据到elasticsearch,然后遇到一个大坑,就是同时同步三个mysql的表的数据到elasticsearch中,然后死活有一个表的数据同步不过去,在kibana中怎么刷新也刷新不出来。
原因分析探索
1、是否支持多个表同时导入,之前我试过两个表一起导入的时候没问题,然后将配置文件改为仅有这不能导入的一个表,也是不行的。所以logstash是可以支持同时导入多表的。
2、linux环境问题。我在windows上搭建了同样的环境,遇到的问题也一样。这个原因排除
3、在网上搜索答案,看到有个文章说用logstash同步的数据表中存在type字段会出现问题。理由是es中有同样的type字段来说明字段的类型。所以我改了下sql,将查询语句中的type改成其他名字,重新试了下,成功了,果然是找个原因。
总结
elasticsearch的这个问题真的是太严重了,关键同步的时候也不报错,输出日志上显示的还是一次次的同步。我们的很多数据表中都有type这个字段,看来以后要同步表,一定要注意将查询语句中的type改为其他名字。elasticsearch应该不能用这种字段来做保留字段,应该像@timestamp这种字段一样,在前面加上@或者下划线作为保留字段。不知道以后的版本会不会改