热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ElasticsearchLogstash实现mysql同步数据到elasticsearch

2019独角兽企业重金招聘Python工程师标准有的时候,我们在做查询时,由于查询条件的多样、变化多端(比如根据时间查、根据名称模糊

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

        有的时候,我们在做查询时,由于查询条件的多样、变化多端(比如根据时间查、根据名称模糊查、根据id查等等),或者查询的数据来自很多不同的库表或者系统,这时就很难以一个较快的速度(几百毫秒)去从关系型数据库中直接获取我们想要的数据。

        针对上面的情况,可以考虑使用elasticsearch来进行数据的汇总,然后提供给后台进行搜索,可以大大提高检索的效率。

        数据在存储在关系型数据库(如mysql)中,我们怎样将这部分数据转移到elasticsearch中。这篇文章将介绍一个同步神器:logstash-input-jdbc

 

安装

  1. 在官网下载最新的安装包:

    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz

  2. 解压并转移目录:

    tar zxvf logstash-6.2.4.tar.gz
    mv ./logstash-6.2.4 /usr/local/logstash

     

 

配置

  1. 安装插件
    由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc、logstash-output-elasticsearch
    安装效果图如下所示:
    115015_qc12_226613.png
    115042_JMm6_226613.png
  2. 下载mysql连接库
    由于logstash是ruby开发的,所以这里要下载mysql的连接库jar包,从官网下载,我这里下载的是:mysql-connector-java-5.1.46.jar
    将下载好的mysql-connector-java-5.1.46.jar,放至/usr/local/logstash/config/目录下。
  3. 修改配置文件
    在config目录下,创建配置文件(logstash-mysql-es.conf):

    input {jdbc {# mysql相关jdbc配置jdbc_connection_string => "jdbc:mysql://10.112.76.30:3306/jack_test?useUnicode=true&characterEncoding=utf-8&useSSL=false"jdbc_user => "root"jdbc_password => "123456"# jdbc连接mysql驱动的文件目录,可去官网下载:https://dev.mysql.com/downloads/connector/j/jdbc_driver_library => "./config/mysql-connector-java-5.1.46.jar"# the name of the driver class for mysqljdbc_driver_class => "com.mysql.jdbc.Driver"jdbc_paging_enabled => truejdbc_page_size => "50000"jdbc_default_timezone =>"Asia/Shanghai"# mysql文件, 也可以直接写SQL语句在此处,如下:# statement => "select * from t_order where update_time >= :sql_last_value;"statement_filepath => "./config/jdbc.sql"# 这里类似crontab,可以定制定时操作,比如每分钟执行一次同步(分 时 天 月 年)schedule => "* * * * *"#type => "jdbc"# 是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中#record_last_run => true# 是否需要记录某个column 的值,如果record_last_run为真,可以自定义我们需要 track 的 column 名称,此时该参数就要为 true. 否则默认 track 的是 timestamp 的值.use_column_value => true# 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是mysql主键tracking_column => "update_time"tracking_column_type => "timestamp"last_run_metadata_path => "./logstash_capital_bill_last_id"# 是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录clean_run => false#是否将 字段(column) 名称转小写lowercase_column_names => false}
    }output {elasticsearch {hosts => "10.112.76.31:9200"index => "mysql_order"document_id => "%{id}"template_overwrite => true}# 这里输出调试,正式运行时可以注释掉stdout {codec => json_lines}
    }
    这里有几个注意点:
    (1)jdbc_driver_library
            mysql-connector-java-5.1.46.jar的存放目录,这个一定要配置正确,支持全路径和相对路径。如果配置不对,将会报“can ”错误。
    (2)sql_last_value
            标志目前logstash同步的位置信息(类似offset)。比如id、updatetime。logstash通过这个标志,可以判断目前同步到哪一条数据。
    (3)statement、statement_filepath
            statement:执行同步的sql语句,可以同步部分数据。
            statement_filepath:存储执行同步的sql语句。不和statement同时使用。
    (4)schedule
            定时器,表示每隔多长时间同步一次数据。格式类似crontab。
    (5)tracking_column、tracking_column_type
            tracking_column:表示表中哪一列用于判断logstash同步的位置信息。与sql_last_value比较判断是否需要同步这条数据。
            tracking_column_type:racking_column指定列的类型。支持两种类型:numeric(默认)、timestamp。注意:如果列是时间字段(比如updateTime),一定要指定这个类型为timestamp。我就踩了这个大坑。。。一直同步不成功!!!
    (6)last_run_metadata_path
            存储sql_last_value值的文件名称及位置。
    (7)document_id
            生成elasticsearch的文档值,尽量使用同步的数据中已有的唯一标识。比如同步订单数据,可以使用订单号。

启动

在根目录下,执行命令:

nohup bin/logstash -f config/logstash-mysql-es.conf > logs/logstash.out &

效果图如下:

162438_c6r4_226613.png

同步

162543_xB2t_226613.png

完成了一条数据的同步

 


转:https://my.oschina.net/xiaowangqiongyou/blog/1812708



推荐阅读
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 在使用 MySQL 6.0.x 及以上版本的 JDBC 驱动时,若未正确配置 `serverTimezone` 参数,可能会导致连接异常。本文探讨了这一问题的原因及解决方法。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
author-avatar
mobiledu2502886233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有