博客
关于我
logstash mysql 准实时同步到 elasticsearch
阅读量:796 次
发布时间:2023-02-06

本文共 2590 字,大约阅读时间需要 8 分钟。

MySQL 到 Elasticsearch 的数据同步:使用 Logstash 实现

在数据分析领域,Elasticsearch 是一个强大的选择,而 MySQL 作为传统的关系型数据库,虽然在数据持久化方面表现出色,但在数据分析方面稍显不足。为了弥补这一不足,我们可以使用 Logstash 来将 MySQL 数据实时同步到 Elasticsearch 中。

Logstash 获取与安装

首先,我们需要下载并安装 Logstash。可以通过以下命令轻松获取:

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.zipunzip logstash-6.2.3.zipcd logstash-6.2.3

接下来,安装必要的插件:

bin/logstash-plugin install logstash-input-jdbcbin/logstash-plugin install logstash-output-elasticsearch

同时,我们还需要下载 MySQL 的 JDBC 驱动:

wget https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.46.zipunzip mysql-connector-java-5.1.46.zip

配置文件编写

Logstash 输入配置(logstash-input-jdbc

使用 logstash-input-jdbc 插件读取 MySQL 数据。该插件通过定时执行 SQL 语句来获取数据,支持增量同步。我们需要指定以下参数:

input {  jdbc {    jdbc_driver_library: /path/to/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar    jdbc_driver_class: com.mysql.jdbc.Driver    jdbc_connection_string: jdbc:mysql://
:3306/rta jdbc_user:
jdbc_password:
schedule: "* * * * *" statement: "SELECT * FROM table WHERE update_time >= :sql_last_value" use_column_value: true tracking_column_type: "timestamp" tracking_column: "update_time" last_run_metadata_path: "syncpoint_table" }}

配置说明:

  • jdbc_driver_library:MySQL JDBC 驱动路径。
  • jdbc_driver_class:驱动类路径。
  • jdbc_connection_string:MySQL 连接地址。
  • jdbc_user:数据库用户名。
  • jdbc_password:数据库密码。
  • schedule:定时执行 SQL 的调度规则。
  • statement:执行的 SQL 语句,:sql_last_value 是内置变量。
  • use_column_value:启用递增列同步。
  • tracking_column_type:递增字段类型(建议使用 timestamp)。
  • tracking_column:递增字段名称。
  • last_run_metadata_path:记录上次同步的文件路径。

Logstash 输出配置(logstash-output-elasticsearch

将数据同步到 Elasticsearch:

output {  elasticsearch {    hosts: ["172.31.22.165", "172.31.17.241", "172.31.30.84", "172.31.18.178"]    user: 
password:
index: "table" document_id: "%{id}" }}

配置说明:

  • hosts:Elasticsearch 集群地址。
  • user:Elasticsearch 用户名。
  • password:Elasticsearch 密码。
  • index:目标索引名称。
  • document_id:文档 ID,建议设置为 MySQL 表的主键。

运行

将上述配置保存为 sync_table.cfg,然后执行以下命令:

cd logstash-6.2.3bin/logstash -f config/sync_table.cfg

其他问题

多表同步

要同步多个表,可以创建多个配置文件,并在 config/pipelines.yml 中配置:

- pipeline.id: table1  path.config: "config/sync_table1.cfg"- pipeline.id: table2  path.config: "config/sync_table2.cfg"

运行 bin/logstash 即可启动多表同步。

@timestamp 字段

默认情况下,@timestamp 字段为当前时间。如需使用数据中的 timeslice 字段指定时间,可以添加以下过滤器:

filter {  date {    match => [ "timeslice", "yyyyMMddHHmm" ]    timezone => "Asia/Shanghai"  }}

将此部分添加到 sync_table.cfg 中,确保 @timestamptimeslice 一致。

参考链接

转载地址:http://ecufk.baihongyu.com/

你可能感兴趣的文章
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>