SpringBoot2>08 - Logstash同步数据库数据到ES

扯淡:

上一章遗留了ES的索引和数据库的同步采取API操作非常慢这个问题。本章将采用Logstash解决这一问题。ELK(Elasticsearch , Logstash, Kibana),我们肯定听说过,一般在大型项目中用于搭建日志分析系统,1、ES:搜索引擎,2、Logstash:搜集、传输、处理日志或其他数据的工具,3、Kibana:将日志分析可视化。本章仅使用Logstash从数据库同步数据到ES。

 springboot、springcloud、docker学习目录:【传送门

Logstash使用:

1、安装:下载解压即可。

下载地址:

https://www.elastic.co/cn/downloads/logstash

2、首次运行测试:

进入bin目录执行命令:

# 测试 stdin:键盘输入 stdout:屏幕输出
logstash -e 'input { stdin { } } output { stdout {} }'

键盘输入回车,若看到屏幕输出即安装成功。

参数:

-e :执行

-f :指定文件

同步数据库数据到ES:

1、MySQL有如下表:

2、Logstash安装目录下新建文件夹mysqletc(路径、名称不固定,建议如此)

3、mysqletc中新建mysql.conf(名称不固定)。

mysql.conf(根据需求对应修改):

input {
  jdbc {
      # mysql jdbc connection string to our backup databse
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/springboot2.0?useSSL=false&useUnicode=true&characterEncoding=utf8"
      # the user we wish to excute our statement as
      jdbc_user => "root"
      jdbc_password => "root"
      # the path to our downloaded jdbc driver  
      jdbc_driver_library => "E:/es/logstash-5.6.8/mysqletc/mysql-connector-java-5.1.44.jar"
      # the name of the driver class for mysql
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      # 是否分页
      jdbc_paging_enabled => "true"
      # 每页记录数
      jdbc_page_size => "6"
      # 以下对应着要执行的sql的绝对路径。
      #statement_filepath => ""
      # 简单SQL可直接写到此处
      statement => "select id, name, content, writer from es_article"
      #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新(测试结果,不同的话请留言指出)
      schedule => "* * * * *"
  }
}

output {
  elasticsearch {
      #ESIP地址与端口
      hosts => "127.0.0.1:9200" 
      #ES索引名称(自己定义的)
      index => "article"
      #自增ID编号
      document_id => "%{id}"
      document_type => "articles"
  }
  stdout {
      #以JSON格式输出
      codec => json_lines
  }
}

可修改的地方:

  • 数据库的连接、驱动等信息,因为Logstash亦可支持其他数据库。

  • 分页相关。

  • statement :查询数据库的SQL,字段为需要同步到ES中的字段。

  • schedule :定时表达式,最小单位为分钟,注意与spring task中的@schedule (cron = "") 区分开。

4、启动Logstash(ES相关软件都已启动):

# 启动Logstash -f:指定自定义输入输出文件
logstash ‐f ../mysqletc/mysql.conf

5、控制台:

看到自定义的查询SQL语句,根据自定义配置文件配置(schedule => "* * * * *"),每分钟执行一次。

6、ES监控:http://127.0.0.1:9100/

可看到数据库中数据已同步到ES。

至此,Logstash同步表数据到ES中完成。

TIPS:

1、相同的数据会被第二次执行时覆盖。
2、前一次同步的数据不会因为第二次同步没有该数据而删除。
3、综上,建议对需要同步到ES的表作假删除操作,即标识符删除(例如:flag: 0/1)


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

猜你喜欢

转载自blog.csdn.net/cp026la/article/details/86551165