logstash-input-jdbc实现ElasticSearch与mysql同步

初步了解ES后,想要实现mysql数据同步到ES上。在查询网上资料后,总结mysql同步到ES一般常用三种方式:

  1. logstash-input-jdbc: ruby语言开发,ES官方推荐
  2. elasticsearch-jdbc: Java开发
  3. go-mysql-elastic:

经过对比后,本来要选择elasticsearch-jdbc,但费了半天劲后,发现其只支持到ES2.3.4,而我选择使用的ES版本是最新的5.6.3,所以放弃转向官方推荐的logstash-input-jdbc。本来看到网上资料感觉这个插件安装会特别麻烦,但经过尝试后,发现并不麻烦,大概是因为logstash5.x之后,集成了logstash-input-jdbc插件,我们并不需要再下载。

logstash-input-jdbc插件是logstash 的一个个插件,我是先安装logstash,然后使用logstash-input-jdbc。过程如下:

一、logstash安装

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。

下载地址:https://www.elastic.co/downloads/logstash

下载解压后,将文件放置在某一位置即可(免安装)

测试:

./logstash -e 'input { stdin { } } output { stdout {} }'

出现下图结果表明成功
这里写图片描述

二、logstash-input-jdbc安装

文档介绍:
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html
这里写图片描述
Logstash5.x以上版本本身自带有logstash-input-jdbc,但是根据文档可知,插件默认没有绑定,还需安装,只需要简单命令行即可。

bin/logstash-plugin install logstash-input-jdbc

这里写图片描述
这个过程会需要等待几分钟。

安装成功后我们可以在logstash根目录下的以下目录查看对应的插件版本

# cd ../vendor/bundle/jruby/1.9/gems/logstash-input-jdbc-4.2.4

可见logstash-5.6.3对应的jdbc插件版本是4.2.4。

三、同步测试

logstash 和logstash-input-jdbc都安装后,和mysql进行同步测试。
首先保证本地有mysql数据库连接包,mysql-connector-java-x.x.x.jar
然后编写测试所用配置文件mysql.conf

input {
    stdin {
    }
    jdbc {
      jdbc_connection_string => "jdbc:mysql://localhost:3306/test?serverTimezone=UTC"
      jdbc_user => "root"
      jdbc_password => "123456"
      jdbc_driver_library => "E:\ES\logstash-5.6.3\mysql-connector-java-6.0.6.jar"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement => "select * from user"
      schedule => "* * * * *"
      type => "user"
    }
}

output {
    elasticsearch {
        hosts => "127.0.0.1:9200"
        index => "test"
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }
}

其配置参数在文档中有详细介绍。
(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
这里写图片描述
配置文件写完保存后,继续命令行

bin/logstash -f config-mysql/mysql.conf

(因为我在bin目录下新建config-mysq文件夹了)

配置案例可查阅https://www.elastic.co/guide/en/logstash/current/config-examples.html

如果成功可在命令行窗口看到数据库中的数据被读取出来,在浏览器sense插件可查询到刚刚添加的索引。

GET test/user/_search

这里写图片描述

四、问题

测试过程中遇到的问题有:
1、mysql驱动名异常:

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new
driver class is
com.mysql.cj.jdbc.Driver’. The driver is
automatically registered via the SPI and manual loading of the driver
class is generally unnecessary.

根据提示将原本com.mysql.jdbc.Driver替换成om.mysql.cj.jdbc.Driver
2、mysql The server time zone value 异常:
在项目代码-数据库连接URL后,加上 (注意大小写必须一致)?serverTimezone=UTC

参考:
https://www.2cto.com/kf/201707/661256.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值