赞
踩
上一章遗留了ES的索引和数据库的同步采取API操作非常慢这个问题。本章将采用Logstash解决这一问题。ELK(Elasticsearch , Logstash, Kibana),我们肯定听说过,一般在大型项目中用于搭建日志分析系统,1、ES:搜索引擎,2、Logstash:搜集、传输、处理日志或其他数据的工具,3、Kibana:将日志分析可视化。本章仅使用Logstash从数据库同步数据到ES。
个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】
1、安装:下载解压即可。
下载地址:
Download Logstash Free | Get Started Now | Elastic
2、首次运行测试:
进入bin目录执行命令:
- # 测试 stdin:键盘输入 stdout:屏幕输出
- logstash -e 'input { stdin { } } output { stdout {} }'
键盘输入回车,若看到屏幕输出即安装成功。
参数:
-e :执行
-f :指定文件
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 文章,关注微信公众号吧:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。