通过LogStash 将mysql数据同步到elasticsearch

参考 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

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值