淘东电商项目(42) -利用Logstash自动同步数据库内容到ES(多文件方式)

引言

本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

在前篇的博客《淘东电商项目(41) -利用Logstash自动同步数据库内容到ES(超详细)》,主要讲解了logstash如何同步MySQL数据库内容到ES,以商品表为例子举例的,配置文件只有一个。如果要同步多张表,对应的配置文件也是多个的,该如何实现呢?其实很简单的,配置下pipelines就可以了,本文来讲解下。

本文目录结构:
l____引言
l____ 1. 新增配置文件
l____ 2. pipelines配置
l____ 3. 总结

1. 新增配置文件

首先贴出上一篇的配置文件(mysql.conf):

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/lib/mysql-connector-java-5.1.46.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.18.166:3306/taodong-goods"
    jdbc_user => "root"
    jdbc_password => "123456"
    schedule => "* * * * *"
    statement => "SELECT * FROM product WHERE UPDATED_TIME > :sql_last_value"
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "updated_time"
    last_run_metadata_path => "syncpoint_product_table"
  }
}


output {
    elasticsearch {
        hosts => ["192.168.162.134:9200"]
        index => "product"
        document_id => "%{id}"
        document_type => "product"
    }
    stdout {
        codec => json_lines
    }
}

上一篇博客的配置表主要是同步数据库里的商品表(product)到ES里的,现在需要同步数据库的商品目录表(category)到ES,下面直接贴配置文件的代码(mysql1.conf):
在这里插入图片描述

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/lib/mysql-connector-java-5.1.46.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.18.166:3306/taodong-goods"
    jdbc_user => "root"
    jdbc_password => "123456"
    schedule => "* * * * *"
    statement => "SELECT * FROM category WHERE UPDATED_TIME > :sql_last_value"
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "updated_time"
    last_run_metadata_path => "syncpoint_category_table"
  }
}


output {
    elasticsearch {
        hosts => ["192.168.162.134:9200"]
        index => "category"
        document_id => "%{id}"
        document_type => "category"
    }
    stdout {
        codec => json_lines
    }
}

注意:我修改了上面两个配置文件的最新同步时间点保存的目标源,每个表必须配置一个同步时间点文件:上面两个例子last_run_metadata_path(同步时间点文件)的名字分别是syncpoint_product_tablesyncpoint_category_table

2. pipelines配置

1.上传文件到logstash的config文件夹内(/usr/share/logstash/config),如下:
在这里插入图片描述
2.配置当前文件夹里的pipelines.yml文件,配置内容如下:

- pipeline.id: product_table
  path.config: "/usr/share/logstash/config/mysql.conf"
- pipeline.id: category_table
  path.config: "/usr/share/logstash/config/mysql1.conf"

在这里插入图片描述
3.退出,并重启logstash

exit
docker restart logstash

4.查看logstash日志,可以看到已经查询到了最新的数据:

docker logs -f logstash

在这里插入图片描述
在这里插入图片描述
5.使用kibana查看,可以看到logstash把最新的数据插入到了ES:

productcategory
在这里插入图片描述在这里插入图片描述

3. 总结

本文主要讲解使用多文件的方式,利用logstash自动同步多张表数据到ES。

需要注意的点是:

  • 每个配置文件的同步点文件不能相同
  • 配置文件对应数据库相关的字段、表名等都不能为大写,否则会出现异常。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值