欢迎光临散文网 会员登陆 & 注册

使用Logstash同步Mysql到Easysearch

2023-08-15 09:41 作者:INFINI-Labs  | 我要投稿

从 Mysql 同步数据到 ES 有多种方案,这次我们使用 ELK 技术栈中的 Logstash 来将数据从 Mysql 同步到 Easysearch 。


方案前提

  1. Mysql 表记录必须有主键,比如 id 字段。通过该字段,可将 Easysearch 索引数据与 Mysql 表数据形成一对一映射关系,支持修改。

  2. Mysql 表记录必须有时间字段,以支持增量同步。

如果上述条件具备,便可使用 logstash 定期同步新写入或修改后的数据到 Easysearch 中。


方案演示


版本信息

Mysql: 5.7
Logstash: 7.10.2
Easysearch: 1.5.0


MySQL 设置

创建演示用的表。


说明

  • id 字段: 主键、唯一键,将作为 Easysearch 索引中的 doc id 字段。

  • modification_time 字段: 表记录的插入和修改都会记录在此。

  • client_name: 代表用户数据。

  • insertion_time: 可省略,用来记录数据插入到 Mysql 数据的时间。


插入数据


Logstash

配置文件



  • 每 5 秒钟同步一次 es_table 表的数据到 mysql_sync_idx 索引。

  • 每 5 秒统计一次 es_table 表的记录条数到 table_counts 索引,用于监控。


启动 logstash


./bin/logstash -f sync_es_table.conf

查看同步结果, 3 条数据都已同步到索引。


Mysql 数据库新增记录


INSERT INTO es_table (id, client_name) VALUES (4, 'test 4');

Easysearch 确认新增

Mysql 数据库修改记录


UPDATE es_table SET client_name = 'test 0001' WHERE id=1;

Easysearch 确认修改


删除数据

Logstash 无法直接删除操作到 ES ,有两个方案:

  1. 在表中增加 is_deleted 字段,实现软删除,可达到同步的目的。查询过滤掉 is_deleted : true 的记录,后续通过脚本等方式定期清理 is_deleted : true 的数据。

  2. 执行删除操作的程序,删除完 Mysql 中的记录后,继续删除 Easysearch 中的记录。


同步监控

数据已经在 ES 中了,我们可利用 INFINI Console 的数据看板来监控数据是否同步,展示表记录数、索引记录数及其变化。


使用Logstash同步Mysql到Easysearch的评论 (共 条)

分享到微博请遵守国家法律