云数据库虚拟主机(云服务器云虚拟主机)
240
2022-07-13
怎么将MySQL数据库中某表全量导入到es中,这个问题大概困扰了不少人。今天小编将从具体的应用场景入手向大家介绍MySQL数据库中某表全量导入到es中的实现思路和具体操作步骤。那么,话不多说,跟着小编一起来学习吧!
MySQL数据库中某表全量导入到es中的应用场景
对于MySQL数据库中某表全量导入到es中,首先我们来看一个场景:想要统计新订单的实时增加情况?想要实时跟踪库存的变化?想要订阅业务数据库的变更?下游业务希望实时感知数据库的变更,但频繁查询增量数据又影响业务数据库性能。如何又快又好的做好这些事,而又不影响线上数据库的性能?
其具体的实现思路:代码对接上游业务数据库,实时对Binlog数据分析、解析、PB格式序列化和压缩后,将数据库变更推送到Kafka。下游各应用消费Kafka的数据从而实时获取上游业务库的数据变更。这样,如果下游系统是使用ES系统的话,就可以再message system注册成为consumer,一旦上游数据库产生变更,就可以及时获取到kafka发来的消息,将MySQL数据库变更同步到elasticsearch库。
MySQL数据库中某表全量导入到es中——数据的导入
目前MySQL 数据库数据量约10亿,有几张大表1亿左右,直接在MySQL查询出现各种效率问题,因此想着将数据导一份到ES,从而实现大数据快速检索的功能。通过Logstash插件批量导数据,会出现各种奇怪的问题,例如ES 内存暴满,MySQL 所在服务器内存暴,最主要的是在一次导数时不能所导的数据量不能太大。经过一次次试探Logstash与优化Logstash导数的最后,最终还是动手直接运用ES提供的api进行导数了。
目前直接模拟测试批量导数据,无论是通过Logstash还是ES 提供的Api峰值均能达到10万每秒左右。下面上代码,主要是通过官网提供的api (RestHighLevelClient、BulkProcessor)整理而来。目前由于MySQL 查询出来的数据需要进行一些处理,基本可达到3.5万+每秒。这个速度还有不小的优化空间,比如笔者通过稍微修改下述代码,启动几个线程同时执行bulk多张表,从kibana界面看出速度达到了成倍的提升,因为速度已基本达到小编所想要的,便不怎么进行优化代码了。
MySQL数据库中某表全量导入到es中——操作步骤
首先MySQL数据库中某表全量导入到es中之前,下载安装包,注意下载到指定文件夹。
1.安装logstash:进入到opt文件夹打开终端 执行以下命令:wget -c https://artifacts.elastic.co/downloads/logstash/logstash-6.4.0.zip,加上-c支持断点续传。
2.解压logstash:unzip logstash-6.4.0.zip。
3.进入到logstash bin目录:cd logstash-6.4.0/bin。
4.安装logstash-jdbc https://blog.csdn.net/my201110lc/article/details/logstash-plugin install logstash-input-jdbc。
5.编写配置文件(jdbc.sql和jdbc.conf,建议在bin目录下vim jdbc.conf)。
6.首先在bin目录下新建一个MySQL目录,里面包含jdbc.conf,jdbc.sql文件,加入MySQL的驱动,jdbc.conf内容:jdbc.sql里面就直接写sql语句就行了,全量同步sql语句就不要写testid了 增量同步就加上where条件 where?testid > :sql_last_value。
7.开始导入(需要用root账户启动):https://blog.csdn.net/my201110lc/article/details/logstash -f MySQL/jdbc.conf。
以上就是有关怎么将MySQL数据库中某表全量导入到es中的实现思路和具体步骤,相信大家应该有所了解了,那么可以动手操作试试看啦!我们下期再会了!
发表评论
暂时没有评论,来抢沙发吧~