Logstash实时同步MySQL数据到ElasticSearch的经验总结


ElasticSearch可以提供强大灵活的搜索功能,这是MySQL不具备的。所以当业务需要复杂的搜索功能时,一般用ElasticSearch提供搜索功能。此时ElasticSearch如何能实时同步MySQL的数据至关重要,Logstash可以通过简单的一些配置来实现MySQL数据同步到ElasticSearch。关于一些基础的配置详细讲解可以参考 官方博客。本文总结作者项目中碰到的一些实际问题以及解决方案。

项目需求

项目需要实现对MySQL数据的快速读取以及查询功能,查询包括对所有列的全文检索,单列的下拉过滤,搜索自动补全等。ElasticSearch能够满足所有的项目搜索需求。MySQL中共有6个view需要同步到ES,每个view都是join多张表,最大的view有一千多万条数据,每天有上万条的新增。每个view中均有updated_time列,每当数据更新时,updated_time会更新。以其中的project view为例,介绍如何做到MySQL与ElasticSearch之间的实时同步。

Logstash配置详解

软件版本

Logstash: 7.9.3
ElasticSearch: 7.9.3
MySQL:AWS Aurora MySQL 5.7.12

pipeline配置文件

input {
   
  jdbc {
   
    jdbc_driver_library => "/opt/mysql-connector-java-8.0.16.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://${
   JDBC_HOSTNAME}:${
   JDBC_PORT}/${
   DB_NAME}?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull"
    jdbc_user => "${
   JDBC_USER}"
    jdbc_password => "${
   JDBC_PASSWORD}"
    jdbc_paging_enabled => true
    tracking_column => "unix_ts_in_secs"
    use_column_value => true
    tracking_column_type => "numeric"
    schedule => "*/1 * * * *"
    record_last_run => true
    last_run_metadata_path => "/mnt/lastrun/.project_last_run"
    statement => "SELECT *, UNIX_TIMESTAMP(updated_time) AS unix_ts_in_secs FROM view_project WHERE (UNIX_TIMESTAMP(updated_time)) > :sql_last_value AND updated_time < NOW() ORDER BY updated_time asc"
  }
}

filter {
   
    mutate 
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要实现LogstashMySQL实时同步,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了LogstashMySQL,并配置好相应的连接信息。 2. 在Logstash中使用jdbc输入插件,该插件可以从MySQL数据库读取数据。您可以在Logstash配置文件中添加以下内容: ```bash input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/your_database" jdbc_user => "your_username" jdbc_password => "your_password" jdbc_driver_library => "/path/to/mysql-connector-java.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" statement => "SELECT * FROM your_table WHERE updated_at > :sql_last_value" use_column_value => true tracking_column => "updated_at" tracking_column_type => "timestamp" } } ``` 确保将上述配置中的数据库连接信息、表名和更新时间字段替换为您自己的信息。 3. 配置Logstash的输出插件,将数据发送到您希望同步的目的地。例如,您可以使用elasticsearch插件将数据发送到Elasticsearch: ```bash output { elasticsearch { hosts => ["localhost:9200"] index => "your_index" document_id => "%{id}" } } ``` 将上述配置中的Elasticsearch主机和索引名称替换为您自己的信息。 4. 启动Logstash,并它将会开始监视MySQL数据库,并将更改的数据实时同步Elasticsearch(或其他目的地)中。 请注意,这只是一个简单的示例配置,并且您可能需要根据自己的需求进行修改。同时,确保您已经安装了适当版本的MySQL JDBC驱动程序,并将`jdbc_driver_library`配置为正确的路径。 希望这些信息能对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值