logstash增量同步mysql数据到es
Posted JAVA开发蓝猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logstash增量同步mysql数据到es相关的知识,希望对你有一定的参考价值。
本篇本章地址:https://www.cnblogs.com/Thehorse/p/11601013.html
今天我们来讲一下logstash同步mysql数据到es
我认为呢,logstash是众多同步mysql数据到es的插件中,最稳定并且最容易配置的一个。
input {
stdin {
}
jdbc {
type => "xxx"
jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/yinhelaowu"
jdbc_user => "root"
jdbc_password => "root"
jdbc_driver_library => "mysql1/mysql-connector-java-5.1.17-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_paging_enabled => true
jdbc_page_size => "500"
record_last_run => true
use_column_value => true
tracking_column => "id"
last_run_metadata_path => "mysql1/jdbc1"
clean_run => "false"
statement_filepath => "mysql1/jdbc.sql"
schedule => "* * * * *"
clean_run => false
}
}
我来讲一下这些属性的作用,像type这个 主要是为了声明这个jdbc{} 这个处理对象的,type可以定义任意值,
jdbc_connection_string ,这个是数据库地址 还有用户名密码
jdbc_driver_library,logstash是需要使用jdbc来连接mysql的,并且使用logstash必须配置java环境,jdk1.8以上
jdbc_driver_class给本次连接起名 statement_filepath 这个是执行的sql语句
schedule 是表示多长时间同步一下数据 如果是******表示一分钟同步一次
last_run_metadata_path这个会记录你最后一次同步数据的一些值,比如你可以记录创建时间,和自增的id,
type索引类型
clean_run 是否清楚执行过的数据
到了下边
#这是输出流
output {
#这个type是上面jdbc的type,有了这个if就可以进行批处理
if [type]=="TInquiryInfo"{
elasticsearch {
#这边的端口一定是9200,java中使用的端口是9300这边不要弄混了
hosts => ["localhost:9200"]
# 索引名称
index => "ca-inquiry"
# type名称
document_type => "TInquiryInfo"
# 文档id,inquiryId为sql文件中查询出的字段名
document_id => "%{inquiryId}"
}
}
}
下面是执行的sql写法
SELECT c.*,CONCAT(CONCAT(c.lat,\',\'),c.lng) AS location,u.`praise`,u.`age`,u.`area_id` FROM zsf_carftsmanship c
LEFT JOIN zsf_user u ON c.user_id = u.`id` WHERE c.id > :sql_last_value
像elasticsearch这种大数据量查询,多表关联查询无疑对性能有很大的冲击,所以这边我直接做了关联查询
这样的话可以大大提高es的查询性能,这个:sql_last_value是last_run_metadata_path中记录的值
以上是关于logstash增量同步mysql数据到es的主要内容,如果未能解决你的问题,请参考以下文章
干货 | Debezium实现Mysql到Elasticsearch高效实时同步