参考 http://www.manongjc.com/detail/14-ittmigytnoothnc.html
Logstash同步Mysql数据至ElasticSearch
目的
最近有个数据涉及到大量各种检索的功能,于是想到使用elasticsearch的全文检索来实现,首先需要将mysql中的数据同步至elasticsearch。晚上查阅若干方案后,决定使用Logstash来完成同步工作。
其余还有canel同步,利用mysql binlog 手动同步等等。本文主要介绍Logstash
前提
使用Docker将Logstash与Elasticsearch已经提前安装好。
一、安装logstash-input-jdbc
1.进入logstash容器终端
docker exec it logstash bash
2.安装logstash-input-jdbc 插件
logstash-plugin install logstash-input-jdbc
3.看到如下输出说明安装成功
二、配置logstash配置文件
1、场景简介 比如我们需要检索资讯文章,单纯用mysql实现效率实在太低,特别是数据量大的时候。这时候我们就可以用到es,logstash定时把新增和更新的文章同步到es,业务上我们可以直接调用es的API检索文章。
2、在conf.d目录下配置jdbc.conf文件和jdbc.sql文件
(1)配置文件jdbc.conf (注意 实际配置注释需去掉,否则会报错)
input { stdin {} jdbc { #连接的数据库地址和哪一个数据库,指定编码格式,禁用SSL协议,设定自动重连 jdbc_connection_string => "jdbc:mysql://192.168.16.241:3306/wsy_blockchain?characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=UCT" jdbc_user => "root" jdbc_password => "12345678" #连接mysql的jar包存放路径 jdbc_driver_library => "/opt/mysql-connector-java-8.0.15.jar" #驱动 jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_paging_enabled => "true" jdbc_page_size => "50000" codec => plain { charset => "UTF-8" } #追踪的字段 我这里用的是创建时间(主要用来测试) tracking_column => createtime record_last_run => true #这个一直找不到原因为什么打开就会报错 last_run_metadata_path => "/usr/local/opt/logstash/lastrun/.logstash_jdbc_last_run" #这个一直找不到原因为什么打开就会报错 #jdbc_default_timezone => "Asia/Shanghai" #同步数据的语句存放位置 statement_filepath => "/usr/share/logstash/bin/jdbc.sql" #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录 clean_run => false #这是控制定时的,重复执行导入任务的时间间隔,第一位是分钟 不设置就是1分钟执行一次 schedule => "* * * * *" type => "std" } } filter { json { source => "message" remove_field => ["message"] } ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" } ruby { code => "event.set('@timestamp',event.get('timestamp'))" } mutate { remove_field => ["timestamp"] } } output { elasticsearch { hosts => "192.168.16.241:9200" index => "test_data" document_type => "users" document_id => "%{id}" } stdout { codec => json_lines } }
(2)配置jdbc.sql
select id,nickname,mobile, createtime from users where createtime > :sql_last_value
3、启动配置文件jdbc.conf文件,开始同步数据
logstash -f jdbc.conf
4、可以看到开始同步了
启动内存不足问题
默认大小是1G
1.将启动时指定jvm内存大小
https://blog.csdn.net/weixin_31257709/article/details/88575297
2.进入容器终端,找到jvm.options 修改内存大小
-Xms256m
-Xmx256m
https://blog.csdn.net/qq_40597878/article/details/89639629