logstash-input-jdbc实现elasticsearch和MySQL数据同步

环境

版本:5.5.3

安装elasticsearch
elasticsearch运行需要jdk1.8,因此需先安装jdk
官网下载elasticsearch压缩包,解压到指定目录,使用默认的配置就好,
windows启动点击bin目录下的elasticsearch.bat文件。

安装kibana
官网下载安装包,解压到指定目录,修改kibana.yml配置文件
elasticsearch.url: “http://localhost:9200
连接到elasticsearch

安装logstash
官网下载logstash压缩包,解压到指定目录。
Windows启动点击bin目录下的logstash.bat文件

安装logstash插件logstash-input-jdbc
修改logstash的Gemfile文件,
source “https://rubygems.org” 改为 source “http://rubygems.org”,去掉s
运行cmd,转到logstash解压后的bin目录,
运行命令 : logstash-plugin.bat install logstash-input-jdbc
等待安装完成

logstash-input-jdbc 插件配置文件:

在logstash的config目录新建MySQL文件夹,并添加如下文件

在这里插入图片描述

如上图所示,

mysql-connector-java-5.1.47.jar 是必须的,书写配置文件时需要用到该jar
logstash-mysql.config 文件为全量同步配置文件,内容如下:
input {
   jdbc {
     jdbc_connection_string => "jdbc:mysql://localhost:3306/demo"
     jdbc_user => "****"
      jdbc_password => "****"
      jdbc_driver_library => "C:/software/logstash-5.5.3/config/MySQL/mysql-connector-java-5.1.47.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement => "select * from user"
      schedule => "* * * * *"
      type => "user"
    }
}
 
filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}
 
output {
    elasticsearch {
        hosts => "localhost:9200"
        index => "user"
        document_id => "%{user_id}"
    }
    stdout {
        codec => json_lines
    }
}

在启动logstash时使用该配置文件启动命令如下:

logstash.bat -f  C:\software\logstash-5.5.3\config\MySQL\logstash-mysql.config

该配置文件通常用于第一次初始化数据使用。

inr-logstash-mysql.config 配置文件为增量同步,内容如下:

input {
   jdbc {
     jdbc_connection_string => "jdbc:mysql://localhost:3306/demo"
     jdbc_user => "root"
      jdbc_password => "admin"
      jdbc_driver_library => "C:/software/logstash-5.5.3/config/MySQL/mysql-connector-java-5.1.47.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
	  use_column_value => true
      #追踪的字段
      tracking_column => user_id
      record_last_run => true
     #上一个sql_last_value值的存放文件路径, 必须要在文件中指定字段的初始值
      last_run_metadata_path => "C:\software\logstash-5.5.3\config\MySQL\user-inc-last-run-metadata.txt"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      statement => "select * from user"
      schedule => "* * * * *"
      type => "user"
    }
}
 
filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}
 
output {
    elasticsearch {
        hosts => "localhost:9200"
        index => "user"
        document_id => "%{user_id}"
    }
    stdout {
        codec => json_lines
    }
}

user-inc-last-run-metadata.txt 文件为存放配置的user_id的最新值,创建该文件时给一个初始值,如:

 --- 0

参数解读:

//是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
record_last_run => true

//是否需要记录某个column 的值,如果 record_last_run 为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.
use_column_value => true

//如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的.比如:ID.
tracking_column => MY_ID

//指定文件,来记录上次执行到的 tracking_column 字段的值
//比如上次数据库有 10000 条记录,查询完后该文件中就会有数字 10000 这样的记录,下次执行 SQL 查询可以从 10001 条处开始.
//我们只需要在 SQL 语句中 WHERE MY_ID > :last_sql_value 即可. 其中 :last_sql_value 取得就是该文件中的值(10000).
last_run_metadata_path => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\station_parameter.txt"


//是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
clean_run => false

//是否将 column 名称转小写
lowercase_column_names => false

//存放需要执行的 SQL 语句的文件位置
statement_filepath => "G:\Developer\Elasticsearch5.5.1\ES5\logstash-5.5.1\bin\mysql\jdbc.sql"

猜你喜欢

转载自blog.csdn.net/qq_36085004/article/details/83149129