使用logstash和RabbitMQ增量同步数据库数据到Elasticsearch

本文介绍了如何结合logstash、RabbitMQ和Elasticsearch实现数据库数据的增量同步。首先,文章讲解了如何配置Elasticsearch索引来忽略大小写,并使用IK Analyzer进行分词。接着,通过logstash进行首次全量同步,然后利用RabbitMQ作为消息队列,在商品数据变更时发送到MQ,由消费者同步到Elasticsearch,以此达到增量同步的目的。这种方法在高并发场景下能有效降低服务器负载。
摘要由CSDN通过智能技术生成

最近在写一个电商项目,在项目中用到了Elasticsearch 6.3.0做搜索商品相关的功能,其中使用了ES插件logstash做数据同步。但是网上大部分都写的是使用logstash做全量同步,用sql将需要查询的数据查出来之后全量同步至ES中,可以设置定时同步任务,但是这种同步方式比较耗性能,网上还有介绍使用logstash做增量同步的,基本上是记录上次同步时间或者最后一条数据的id,然后下次同步时,只需将大于最后一条id的数据同步到ES即可,但这种方式存在一个缺陷——就是之前同步过的数据如果发生了修改便不能在增量同步中发生修改操作。

       于是寻找适合自己的同步方式,项目有用到另一个工具——RabbitMQ,熟悉这个组件的朋友也许知道这是做消息队列的,我们项目使用此组件做即时通讯的消息异步发送并保存消息至数据库,还有订单的一些延时操作,如:订单定时取消,订单定时好评,商品定时上传之类的,在这里做商品数据的同步也是看中其异步操作性能,下面详细介绍我在项目中使用logstash和RabbitMQ做数据同步的一些流程。

      elasticsearch如果要忽略大小写的话,需要在创建索引的时候设置所有的字母都转为小写,如:

"settings": {
        "index": {
            "number_of_shards": "5",
            "number_of_replicas": "1"
        },
        "analysis": {
            "analyzer": {
                "caseSensitive": {
                    "filter": ["lowercase", "asciifolding"],
                    "type": "custom",
                    "tokenizer": "keyword"
                }
            }
    

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于springcloud+Netty+MQ+mysql的分布式即时聊天系统源码+数据库+项目说明.zip # KT-Chat 分布式即时聊天系统 **技术选型**:Java、SpringCloud、Nacos、Sentinel、Netty、MySQL、Redis、RocketMQ 等 **项目描述**:项目基于 SpringCloud Gateway + Nacos + Sentinel + OpenFeign 作为分布式系统架构,基于 Netty 实现高性能网络通信。主要功能有:一对一聊天以及群组聊天、好友管理、群组管理等。 项目独立完成,包括需求分析、设计、开发实现。 关于我在项目中使用 MySQL 读写分离的总结:[MySQL主从延迟的解决方案](https://blog.csdn.net/KIMTOU/article/details/125033199) ## 用例分析 用户能够在聊天系统上进行网络通信,与好友进行实时一对一聊天,与群组成员进行群聊。用户用例图如下所示: 1. 用户登录:登录系统 2. 聊天:包含与好友进行一对一聊天,与群组成员进行群聊。 3. 群聊管理:新建群聊、加入群聊、退出群聊。 4. 好友管理:显示好友列表,添加、删除好友。 5. 在线离线状态显示:查看好友的在线、离线状态。 6. 聊天记录管理:将聊天记录存入数据库,能够显示、删除存储的聊天记录。 <img src="https://cdn.tojintao.cn/Chat原理图.png" alt="img" style="zoom:67%;" /> ## 系统设计 #### 系统总体设计 分布式即时聊天系统分为用户信息子系统、长连接管理子系统、聊天信息子系统共三个子系统,API 网关负责将请求路由至各个子系统。 * 用户信息子系统包含权限校验模块、用户登录模块、好友管理模块,其中好友管理模块包括好友列表、添加好友、删除好友功能; * 长连接管理子系统包含在线状态管理模块、聊天主模块、消息推送模块,其中聊天主模块包括一对一聊天和群聊功能; * 聊天信息子系统包含群聊管理模块、聊天记录管理模块,其中群聊管理模块包括新建群聊、加入群聊、退出群聊功能。 <img src="https://cdn.tojintao.cn/KT-Chat系统结构图.png" style="zoom:67%;" /> #### 系统架构设计 ![](https://cdn.tojintao.cn/KT-Chat系统架构设计.png) 项目基于 Nacos 作为注册中心,将各个服务注册进 Nacos,包括 Netty 服务端;使用 SpringCloud Gateway 作为服务网关,是所有请求的统一入口;限流组件使用 Sentinel;基于 Netty 进行通信、维护长连接;RocketMQ 作为消息队列,处理聊天消息的异步入库以及解决分布式 Netty 节点问题; Zookeeper 用于分布式 id 的生成;Redis 用于记录用户在线状态以及记录 Netty 节点的元数据;MySQL 对数据进行持久化。 ## 运行截图 #### 一对一聊天 ![](https://cdn.tojintao.cn/聊天测试1.PNG) #### 群聊 ![](https://cdn.tojintao.cn/群聊测试1.PNG) ## 启动说明 1. 启动本项目时,需提前启动 Nacos、RocketMQ、MySQL、Redis、ElasticSearch、Sentinal 实例。 2. conntector 与 connector-2 这两个模块并不一样,connector-2 使用了 Dubbo 进行消息转发(实验阶段),而 connector 使用 Feign 进行 HTTP 调用转发消息。启动 connector 就行了。 3. 每个服务都允许运行多个实例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值