我是靠谱客的博主 魁梧嚓茶,最近开发中收集的这篇文章主要介绍logstash-input-jdbc插件配置细节,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      数据库里面有一张表,字段如“学生id”被定义为student_id,“班级名”被定义为class_name等,而在项目中实体类属性一般都是驼峰命名法,如上两个属性在Java实体类中被定为studentId、className;假如你用logstash-input-jdbc将mysql数据同步到elasticsearch后,如果你的sql没有对字段起别名,那么elasticsearch中存储的字段就是mysql中的格式,此时恰好你用的是spring-data-elasticsearch的List<User> list = elasticsearchTemplate.queryForList(searchQuery,User.class);你会发现映射不上,所以在使用插件同步时,在jdbc.sql中对字段起别名以跟JavaBean属性对应:

select student_id as studentId, class_name as className, modify_time as modifyTime from user where modify_time > :sql_last_value;

      同步完以后,通过head插件查看同步的数据,数据没错,但是字段都是小写,例如studentId变成了studentid,className变成了classname;这不行啊,我起别名就是想和实体类对应,结果全变成小写了还是不行,原来jdbc.conf文件中还有一个属性是

lowercase_column_names => "false"
      加上这个属性字段名就OK了。

      另一个问题是logstash-input-jdbc插件支持自定义同步条件,可根据主键记录来同步:首先要打开这两个属性

use_column_value => "true"
tracking_column => "studentId"  //studentId为表的主键
      然后就可以写sql通过主键来同步:
select student_id as studentId, class_name as className,modify_time as modifyTime from user where student_id > :sql_last_value;
      通过主键来同步后,我发现新增可以同步,但是修改(即更新)无法同步,因为logstash-input-jdbc插件其实是通过jdbc.conf文件中的schedule => "* * * * *" 这个属性来定时去执行jdbc.sql中的sql语句来发现数据是否变化以达到同步效果,如果修改一条记录,因为你sql中where后面是以id变化为条件的,但是你现在只是修改其他属性,id并没有变,不会触发同步,我是这么理解的,如有错误,欢迎指正。而以时间作为同步条件就可以实现更新同步,因为你修改了一条记录,肯定会更新表中修改时间的时间戳(我这里是modify_time的值),如果你的表里没有一个时间的字段,那你可能必须得加一下了。

      你可能想用主键作为elasticsearch文档的id,由于你给主键起了别名,所以在jdbc.conf中也必须这样写:

output{
    elasticsearch{
        hosts => "127.0.0.1:9200"
        user => "elastic"   //这里因为使用x-pack作为安全管理,所以要配置user和password;
        password => "changeme" 
        index => "my_index"
        document_id=>"%{studentId}" //主键起了别名,这里也要使用别名
    }
    stdout{
        codec=>json_lines
    }
}
    最后一个问题是logstash-input-jdbc插件使用的是UTC时间,比我们晚8个小时,你可以在sql语句中使用date_add函数将时间加上8个小时或者使用convert_tz转换时区函数再和mysql时间比较。

    jdbc.conf(配置文件名字随便起)里面还有好多属性需要学习,有的可能暂时用不到,例如编码呀,还有字段转换属性add_field,同步多个表时配置多个数据源,使用if。。else等等高级用法。

    参考博客:http://www.cnblogs.com/licongyu/p/5383334.html#undefined

    https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html


最后

以上就是魁梧嚓茶为你收集整理的logstash-input-jdbc插件配置细节的全部内容,希望文章能够帮你解决logstash-input-jdbc插件配置细节所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部