zoukankan      html  css  js  c++  java
  • 同步mysql数据到ElasticSearch的最佳实践

    Elasticsearch是一个基于Lucene的准实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。它提供了一套易用的基于RESTful web接口的分布式多用户搜索入口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    安装es以及head插件,略。

    为了使海量数据能够提供实时快速的查询,mysql很显然力不从心,于是我们需要利用es提供大数据搜索服务,典型的场景就是:产品或者商品搜索。

    首先是数据同步,将mysql数据同步到es的方式很多,经过测试,稳定且易用的是 logstash-input-jdbc

    如何安装logstash-input-jdbc插件?

    参考:http://blog.csdn.net/yeyuma/article/details/50240595#quote 

    全量同步与增量同步

    全量同步是指全部将数据同步到es,通常是刚建立es,第一次同步时使用。增量同步是指将后续的更新、插入记录同步到es。(删除记录没有办法同步,只能两边执行自己的删除命令)
    根据公司内部实践,logstash-input-jdbc增量同步的原理很简单。我们做增量同步是需要知道插入和更新记录的,因此,进入ES提供搜索服务的表(需要同步的表),都要加上update_time,每次插入和更新的时候更新这个字段,让logstash-input-jdbc知道即可。
    详见:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html#_predefined_parameters

    关键点:
    where t.update_time > :sql_last_value

    测试结果:

    先更新一条数据看看

    然后在es中查询看看有没有更新到

    成功,自动同步了!

    如果需要同时同步多个表,那么需要以下配置

    input {
      jdbc {
        jdbc_driver_library => "/Users/logstash/mysql-connector-java-5.1.39-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
        jdbc_user => "root"
        jdbc_password => "password"
        schedule => "* * * * *"
        statement => "select * from table1"
        type => "table1"
      }
      jdbc {
        jdbc_driver_library => "/Users/logstash/mysql-connector-java-5.1.39-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        jdbc_connection_string => "jdbc:mysql://localhost:3306/database_name"
        jdbc_user => "root"
        jdbc_password => "password"
        schedule => "* * * * *"
        statement => "select * from table2"
        type => "table2"
      }
      # add more jdbc inputs to suit your needs 
    }
    output {
        elasticsearch {
            index => "testdb"
            document_type => "%{type}"   # <- use the type from each input
            hosts => "localhost:9200"
        }
    }
  • 相关阅读:
    [luoguP3953] 逛公园(DP + spfa)
    [luoguP3960] 列队(动态开点线段树)
    [luoguP2325] [SCOI2005]王室联邦(树分块乱搞)
    [luoguP1053] 篝火晚会(贪心 + 乱搞)
    Linux_C socket 一些知识
    Linux_C socket 服务器(cat ,execl功能)
    Linux_C socket server.c clinet.c功能分开写
    Linux_C socket clinet.c
    Linux_C AF_INET和PF_INET的细微不同
    Linux_socket一些基本函数和结构体
  • 原文地址:https://www.cnblogs.com/mignet/p/MySQL_ElasticSearch_sync_By_logstash_jdbc.html
Copyright © 2011-2022 走看看