zoukankan      html  css  js  c++  java
  • ElasticSearch(1)---Logstash同步Mysql数据到ElasticSearch

    ElasticSearch同步Mysql

    先讲项目需求:对于资讯模块添加搜索功能

    这个搜索功能我就是采用ElasticSearch实现的,功能刚实现完,所以写这篇博客做个记录,让自己在记录下整个步骤和过程中的一些注意事项。

    一、安装elasticsearch和可视化工具

    有关整个教程参考:mac安装elasticsearch和可视化工具

    1、安装elasticsearch

    网址地址:官网

    2、安装elasticsearch-head(可视化界面)

    安装地址:https://github.com/mobz/elasticsearch-head

    3、安装Node.js

    安装地址:Mac 下安装node.js

    4、grunt-cli(3、4主要配合2实现可视化界面)

    命令:sudo npm install -g grunt-cli (我的是安装在Mac上,所以其它不一定适用其它)

    在终端运行: grunt --version(成功QQ图)

    5、elasticsearch和elasticsearch-head整合

    修改 elasticsearch.yml 文件,在文档的最末端加入

    http.cors.enabled: true
    http.cors.allow-origin: "*"

    查看查看结果:输入:localhost:9100

    这里说明整个已经安装成功并已经连接成功,green代表很健康

    二、安装logstash并同步MySQL数据库

     相关博客推荐:安装logstash并同步MySQL数据库

    1、下载logstash

    注意:下载的版本要和你的elasticsearch的版本号一致,我的版本elasticsearch6.3.2

    2、配置logstash-jdbc-input

    据说2.x以上就不用配置了,不过我还是配置了

    3、添加mysql-connector驱动jar包

    把这个jar包放入logstash中:mysql-connector-java-5.1.21.jar

    4、添加配置文件(用于连接elasticsearch和mysql数据库)很重要!

    具体的解释推荐博客:logstash input jdbc连接数据库

    input {
      stdin {
      }
    
      jdbc {
      type => "news_info"
      #后面的test对应mysql中的test数据库
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/news"
      jdbc_user => "root"
      jdbc_password => "root"
      tracking_column => "auto_id"
      record_last_run => "true"
      use_column_value => "true"
      #代表最后一次数据记录id的值存放的位置,它会自动在bin目录创建news,这个必填不然启动报错
      last_run_metadata_path => "news"
      clean_run => "false"
    
      # 这里代表mysql-connector-java-5.1.21.jar放在bin目录
      jdbc_driver_library => "mysql-connector-java-5.1.21.jar"
      # the name of the driver class for mysql
      jdbc_driver_class => "Java::com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "500"
      statement => "select auto_id,title,content,up_count,down_count,origin_create_time,grade from t_live_news_origin where auto_id > :sql_last_value and similar_score>0.5"
    #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
    #设定ES索引类型
      }
    
        jdbc {
      type => "press_info"
      # mysql jdbc connection string to our backup databse 后面的test对应mysql中的test数据库
      jdbc_connection_string => "jdbc:mysql:////127.0.0.1:3306/news"
      jdbc_user => "root"
      jdbc_password => "root"
      tracking_column => "auto_id"
      record_last_run => "true"
      use_column_value => "true"
      last_run_metadata_path => "news"
      clean_run => "false"
      jdbc_driver_library => "mysql-connector-java-5.1.21.jar"
      jdbc_driver_class => "Java::com.mysql.jdbc.Driver"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "500"
      statement => "select auto_id,title,source_mc,read_count,summary,summary_img,origin_create_time from t_live_press_origin where auto_id > :sql_last_value"
    #定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
      }
    }
    
    filter {
    mutate {
      convert => [ "publish_time", "string" ]
     }
    
    date {
      timezone => "Europe/Berlin"
      match => ["publish_time" , "ISO8601", "yyyy-MM-dd HH:mm:ss"]
    }
    #date {
     # match => [ "publish_time", "yyyy-MM-dd HH:mm:ss,SSS" ]
      # remove_field => [ "publish_time" ]
      # }
    json {
      source => "message"
      remove_field => ["message"]
      }
    }
    
    output {
    
    if [type]=="news_info" {
      elasticsearch {
    #ESIP地址与端口
      hosts => "127.0.0.1:9200"
    #ES索引名称(自己定义的)
      index => "wantu_news_info"
    #自增ID编号
      document_id => "%{auto_id}"
      }
    }
    
    if [type]=="press_info" {
      elasticsearch {
    #ESIP地址与端口
      hosts => "127.0.0.1:9200"
    #ES索引名称(自己定义的)
      index => "wantu_press_info"
    #自增ID编号
      document_id => "%{auto_id}"
      }
    }
    
    }
    mysql.yml

    5、启动logstash

    #我这里的mysql.yml放到了bin的上层目录
    ./logstash -f ../mysql.yml

    6、实际效果

    连接成功,已经成功把MySQL数据库表中的数据存储到Elasticsearch中,并且logstash每一分钟去数据库读取最新数据。

    最后看下我的logstash文件存放位置

    三、坑和注意事项的总结  

    1、如下报错说明没有找到你的mysql-connectorjar包,很可能你的jar没有放到配置文件指定的目录。 

    2、需要重新让查询从0开始。

    那就删除last_run_metadata_path => "news"的news文件,当然也要记得删除该索引好让它重新读取数据库表中数据。

    相关其它坑博客地址:坑的总结

    再遇到其它相关坑,百度吧,都能快速找到答案。

     我只是偶尔安静下来,对过去的种种思忖一番。那些曾经的旧时光里即便有过天真愚钝,也不值得谴责。毕竟,往后的日子,还很长。不断鼓励自己,

     天一亮,又是崭新的起点,又是未知的征程(上校4)

  • 相关阅读:
    07_面向对象(成员变量和局部变量区别、类作为形式参数的问题、匿名对象、封装、private关键字、this关键字、构造方法、成员方法、static关键字、静态变量和成员变量、main方法)_02
    07_面向对象(成员变量和局部变量区别、类作为形式参数的问题、匿名对象、封装、private关键字、this关键字、构造方法、成员方法、static关键字、静态变量和成员变量、main方法)_01
    书单
    06_二维数组【四种格式、打印杨辉三角、Java中参数传递、数据加密案例】、面向对象【对象内存图】
    05_方法(重载)、数组(一维)[数组的初始化、遍历、求最值、逆序、查表]
    04循环结构
    基于视频压缩的实时监控系统
    select 和 epoll 的区别
    CGI 程序编写
    面经获取 20170515
  • 原文地址:https://www.cnblogs.com/qdhxhz/p/9520685.html
Copyright © 2011-2022 走看看