Elasticsearch + Canal 搜索实践

Elasticsearch + Canal 搜索实践

3.项目成果

目前,已经上线了,也迭代了2个版本,效果还可以。不加缓存TPS能达到800多吧,加上缓存可以1w+。

4.项目开发过程简述

        这个项目是从2020年初开始的,那时候正好是疫情爆发,只能在家弄,一直到10月才完工。最开始的时候对es一无所知,一点点学习es的DSL语句,然后转成java api,开始挺痛苦的,等熟悉了就很轻松了。

这个项目主要分两个部分:搜索和同步。

搜索:这个不难,只要DSL写好,翻译成对应的api就好,正常搜索的时候,外部通过http请求到主程序,程序再去es中查询。

同步:稍微有点麻烦,分为实时同步和全量同步。全量同步是根据业务SQL查询所有站点数据,然后同步到es中,通过bulk批量处理,速度也能接受。实时同步用的是canal,它是伪装成mysql的一个slave,获取到数据库的binlog,数据库有数据变更后,会同步一份binlog过来,java程序中的canal client会获取到这些记录,然后根据业务去数据库查数据,再同步到es中。

4.注意事项

    (a) Canal实时同步:阿里开源出来的,折腾了很久,中间也请领导协调阿里的资源,(感谢我的领导黄总和阿里的七峰同学),之前出现同步非常慢的情况,后来跟阿里同学沟通后知道了自己的题,canal的处理流程是串行的,同步速度取决于程序中的业务处理速度,所以我用了多线程,提高并发处理能力,但要做好异常处理,一旦多线程这里出问题,canal同步就停止了,这狠狠坑了我一次。当时生产刚上线是好的,但没多久,就同步失败,上下线不成功。后来发现是取多线程的时候没做控制,找到问题后,do it !,加上控制后就可以了。

Elasticsearch + Canal 搜索实践

(b)Canal 报错:Could not find first log file name in binary log index file。这个报错是日志文件被转移或者删掉了,导致canal找不到,网上查了好久,最后选了一个性价比高的解决方案,定时任务去扫描canal的日志,如果出现这个错,就重启canal服务,并清理meta.dat。

(c)Elasticsearch的搜索建议词结果不准确的坑。这个折磨了我很久,建议词如果要准确要加上下文检索contexts,如果是python写很简单,但es的java版api支持的不是很好,最后去Stack Overflow上找,看到了个官方的回复,用模板查询方法,SearchTemplateRequestBuilder,自己定制化写DSL就能很好的解决。

Elasticsearch + Canal 搜索实践

暂时先写这些,有问题可以私信我。

文章均来自互联网如有不妥请联系作者删除QQ:314111741 地址:http://www.mqs.net/post/12587.html

相关阅读

  • 如何保证缓存和数据的双写一致性

    如何保证缓存和数据的双写一致性

    image 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇...

    2025.12.09 09:28:14作者:iseeyu
  • 【百度搜索引擎优化】如何快速了解百度搜索引擎优化的知识?(搜索引擎优化基本)

    【百度搜索引擎优化】如何快速了解百度搜索引擎优化的知识?(搜索引擎优化基本)

    在百度输入SEO优化,下拉框就有很多关键词,SEO优化工具,SEO查询,SEO技巧,SEO优化方案,SEO报价,SEO优化教程,SEO优化软件,SEO优化怎么做,等等,相关搜索也有很多长尾关键词。还可以加入一些群,找些大牛问下,向这些大牛学...

    2025.12.09 07:37:38作者:iseeyu
  • R语言dplyr包处理数据2021.3.6

    R语言dplyr包处理数据2021.3.6

    图1 筛选结果 2.2 去除重复行–distinct函数 dplyr::distinct(rbind(iris[1:10,],iris[1:20,]))#取出前10行和前20行合并后去除重复行 图2 去除结果...

    2025.12.09 05:35:02作者:iseeyu

添加新评论