扯淡:
上一章遗留了ES的索引和数据库的同步采取API操作非常慢这个问题。本章将采用Logstash解决这一问题。ELK(Elasticsearch , Logstash, Kibana),我们肯定听说过,一般在大型项目中用于搭建日志分析系统,1、ES:搜索引擎,2、Logstash:搜集、传输、处理日志或其他数据的工具,3、Kibana:将日志分析可视化。本章仅使用Logstash从数据库同步数据到ES。
个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】
Logstash使用:
1、安装:下载解压即可。
下载地址:
Download Logstash Free | Get Started Now | Elastic
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 文章,关注微信公众号吧: