当前位置: 首页 > news >正文

通过Logstash将MySQL数据同步到ES

原理:

通过 Logstash 将 MySQL 数据同步到 Elasticsearch,其核心原理可以概括为:“主动轮询”。它不像 Canal 那样监听 MySQL 的 binlog 变更日志,而是由 Logstash 按照设定好的时间间隔,主动向 MySQL 发起 SQL 查询,然后将查询到的结果写入 Elasticsearch

实现起来很简单 ,下面是一个典型的ELKElasticsearchLogstashKibana)

version: '3.8' services: es: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.16 container_name: es environment: - discovery.type=single-node - xpack.security.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m ports: - "9200:9200" volumes: - es_data:/usr/share/elasticsearch/data networks: - es-net kibana: image: docker.elastic.co/kibana/kibana:7.17.16 container_name: kibana ports: - "5601:5601" environment: - ELASTICSEARCH_HOSTS=http://es:9200 depends_on: - es networks: - es-net logstash: image: docker.elastic.co/logstash/logstash:7.17.16 container_name: logstash depends_on: - es ports: - "5044:5044" - "9600:9600" volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf - ./mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar:/usr/share/logstash/mysql-connector-j-8.3.0.jar networks: - es-net volumes: es_data: networks: es-net: driver: bridge

通这个docker-compoe你就可以运行起来这三个服务了

同时你还需要把logstash.conf 和mysql-connector-j-8.3.0.jar 挂载进去

mysql-connector-j-8.3.0 因为我这是mysql.8.2 所以使用这个


logstash.conf 是主力配置

input { jdbc { jdbc_connection_string => "jdbc:mysql://47.116.153.12:31218/go?useSSL=false&serverTimezone=Asia/Shanghai" # MySQL 连接地址(Go 数据库) jdbc_user => "canal" # MySQL 用户名 jdbc_password => "canal" # MySQL 密码 jdbc_driver_library => "/usr/share/logstash/mysql-connector-j-8.3.0.jar" # MySQL JDBC 驱动 jar 包路径(Logstash 需要) jdbc_driver_class => "com.mysql.cj.jdbc.Driver" # MySQL 8.x 驱动类 statement => " SELECT id, name, description, max_users, background, is_private, password, created_by, created_at, updated_at, invitation_code FROM chat_rooms WHERE updated_at > :sql_last_value AND updated_at IS NOT NULL ORDER BY updated_at ASC " # 查询 SQL: # 作用:增量同步 chat_rooms 表 # 条件: # - 只取 updated_at > 上次同步时间的数据(增量) # - updated_at 不为空 # - 按更新时间升序排序 use_column_value => true # 使用字段值做增量标记(而不是时间戳文件) tracking_column => "updated_at" # 用 updated_at 作为增量同步字段 tracking_column_type => "timestamp" # tracking_column 类型是 timestamp(时间类型) schedule => "* * * * *" # 定时任务:每分钟执行一次(cron 表达式) clean_run => false # false = 不清空历史 offset(继续上次同步位置) last_run_metadata_path => "/usr/share/logstash/data/last_run" # 保存上次同步时间的位置文件(用于断点续传) } } output { elasticsearch { hosts => ["http://es:9200"] # ES 地址(Docker 内部服务名) index => "chat_rooms" # 写入 ES 的索引名称 document_id => "%{id}" # 用 MySQL 的 id 作为 ES document_id(保证幂等,防重复) } stdout { codec => json } # 同时输出到控制台(调试用,JSON 格式) }

运行起来你就会发现他会一直轮询查询,初次表大的话可以带上limit限制,因为Logstash JDBC 的确会“记住上一次的时间”(如果你是根据ID,他会记住上一次的ID)

调整sql 语句发生的事情

这种我建议最好有一个自动更新的update键并且带上索引,根据这个好建立查询语句只调整最近更新的 但是这种方式对真删不太友好,可以说是不支持,因为监听不到delete事件,所以使用这种方法做一下软删可以 但是这种方法上手快

  • 简单,上手快

  • 只需要 MySQL + ES + Logstash

  • 不依赖 binlog(不用改 MySQL 配置)

  • 稳定,适合小中型项目

  • SQL 可控(想查什么就查什么)

http://www.cnnetsun.cn/news/2033846.html

相关文章:

  • 保姆级教程:用Ollama部署translategemma-12b-it,翻译图片文字就这么简单
  • Windows 7/10 端口占用终结者:活用 taskkill 命令精准定位并强制结束进程
  • 给电池“算命”:用Python+EKF算法估算SOC,从模型离散化到代码实现(保姆级教程)
  • Diffusion-Powered Dual-Domain Learning: An Unsupervised Framework for CT Metal Artifact Suppression
  • Phi-3-mini-4k-instruct-gguf部署教程:Ubuntu 22.04 + vLLM 0.6.3 + Chainlit 1.2.0兼容配置
  • 告别7天限制:用AltStore自签实现IPA应用永久化安装与自动续签攻略
  • 别再乱用TransmittableThreadLocal了!线程池场景下这个内存泄漏的坑,我们线上刚踩过
  • 别再手动画图了!用OpenStreetMap+SUMO快速生成城市交通仿真路网(附完整命令)
  • 告别烦人弹窗!深入理解Windows UAC机制,这样设置让你的电脑更安全又顺手
  • 移动平均算法原理与Python实战应用
  • 语际电话点歌台服务流程详解,3分钟上手,心意轻松传递
  • 别再手动调样式了!用EasyExcel 2.2.8 + Hutool 5.5.1,一个Handler搞定Excel报表所有单元格美化
  • 从零到一:构建高可用LSF集群的实战部署指南
  • 电力电子MATLAB/Simulink模块化多电平变换器仿真研究:MMC控制策略及优化波形分析...
  • 终极SteamCMD命令大全:200+命令一键获取与查询指南
  • nli-MiniLM2-L6-H768实操手册:内存泄漏排查与长时间运行稳定性优化
  • Cellpose细胞分割实战指南:从入门到精通的5个关键步骤
  • 个人健康管理系统小程序pf(文档+源码)_kaic
  • HarmonyOS6 ArkTS Search组件使用文档
  • Nginx/Apache网关超时?手把手教你排查和修复504 Gateway Timeout错误
  • DeepSeek总结的PostgreSQL 19查询提示功能
  • Unity网络通信避坑指南:从原生Socket到Mirror,我的多人聊天室开发踩坑实录
  • PKHeX自动合法性插件:新手5分钟快速上手宝可梦数据合规指南
  • ADAPT-VQE算法与格点规范理论的量子计算应用
  • 用Qt 5.14.2 + EMQX搭建本地物联网消息测试环境:从客户端到服务器一条龙配置
  • 终极二维码修复指南:使用QrazyBox拯救损坏的QR码
  • 5步掌握Navicat重置工具:macOS平台终极免费解决方案
  • 深入解析TrollInstallerX架构:从内核漏洞利用到iOS应用持久化的完整技术指南
  • 企业级托管钱包架构设计与MPC密钥管理:基于Go语言的生产级实践
  • GPU加速CFD求解器的异构计算优化策略