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" } }