ES搜索引擎更新机制(包括canal用法)

引言

如今搜索引擎已经在各大it以及互联网公司普遍使用,今天就针对ElasticSearch的数据实时更新功能做一个全面的记录。

索引更新机制

索引更新主要是全量更新和增量更新两种方式:

全量更新:即将索引全部删除,再重新创建。这种方式一般用于项目刚开始、数据迁移、修改es分片数(修改number_of_shards)、修改分词、定期全量更新数据等。一般定期更新都是通过定时任务更新,根据业务需要定好更新周期。 数据量庞大的系统采用大数据处理平台对数据进行离线处理,而数据量不大的系统中直接使用普通的多线程机制即可进行全量更新。 部署ES的时候需要2套或者以上的索引系统,以便做索引更新时,可以对在用系统进行实时切换,保证不影响业务正常使用
利用消息中间件进行增量更新,比如mq、kafka等,在业务数据有变更时,通过消息中间件将变更推送给搜索中心,缺点就是需要和每个业务中心进行对接。 对数据库数据进行监控,做到实时更新,推荐使用阿里巴巴的canal中间件进行实现。 增量更新:对数据的新增、修改、删除操作时,需要实时更新至ES库中,保证用户体验。增量更新主要考虑实时性、性能两个方面,要选择“实时性快”且“性能强”的增量更新方案。

canal中间件安装

下载canal安装包,官网地址为:https://github.com/alibaba/canal/releases/download,不过官网地址比较慢,可以使用百度云盘下载,链接:https://pan.baidu.com/s/1y-uYbMlvARkMH_8TtfzY8A ,提取码:ydbo 开启mysql的binlog配置(mysql安装参考 基于centos7环境安装mysql5.7 此文章 ),因为canal是需要通过mysql的日志文件进行数据同步的:
首先需要确认mysql的binlog是否开启,输入 show variables like '%bin_log%'; 结果如下方“log_bin配置图,其中log_bin对应的value为 ON则代表开始,OFF代表关闭 如果log_bin未开启,则需要修改MySQL配置文件,我这边配置文件路径为 /etc/my.cnf ,在配置文件中加入以下配置,重启mysql即可开启MySQL的log_bin
... log_bin配置图 server_id = 1 binlog_format = ROW log_bin = mysql_bin.log //日志有效期 expire-logs-days = 14 //日志文件最大数量 max-binlog-size = 400M
开始安装配置canal 将下载的canal包解压至目标目录,我的目录为 /home/tangshi/canal,解压命令为: tar -zxvf canal.deployer-1.1.4.tar.gz -C /home/tangshi/canal 修改canal配置,即修改conf/canal.properties文件,通过canal.port配置项可以自定义端口,其他配置不用修改 配置canal和mysql数据库连接,进入canal的conf目录下,创建一个新的目录: mkdir book,将example文件夹的文件复制至book中(为了保存配置文件,方便后续回滚配置),命令: cp instance.properties -C ../book ,修改book下的instance.properties文件,配置参见参考下图: 进入 bin目录,通过./startup.sh进行启动,启动日志查看logs/book目录下的日志文件,canal启动完成
... instance.properties配置


... canal启动日志

canal对接实际项目

将我们的项目配置好引入canal依赖,并且完成canal配置类,如下图 ... canal配置类
... mysql数据处理 配置完成后正常启动,canal就会实时的将mysql的变更数据同步至es库中了