在mysql数据库中输入新数据时通知logstash,而不使用参数schedule

pzfprimi  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(737)

我正在用mysql开发弹性堆栈。一切正常,比如logstash从mysql数据库获取数据并将其发送到elasticsearch,当mysql数据中输入新条目时,我会自动更新elasticsearch,我使用参数:schedule,但在这种情况下,logstash会不断检查来自其终端的新数据,这是我最关心的问题。

input {

  jdbc { 
    jdbc_connection_string => "jdbc:mysql://localhost:3306/testdb"
    # The user we wish to execute our statement as
    jdbc_user => "root"
    jdbc_password => ""
    # The path to our downloaded jdbc driver
    jdbc_driver_library => "/home/Downloads/mysql-connector-java-5.1.38.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    #run logstash at an interval of on minute
    schedule => "*/15 * * * *"
    use_column_value => true
    tracking_column => 'EVENT_TIME_OCCURRENCE_FIELD'
    # our query
    statement => "SELECT * FROM brainplay WHERE EVENT_TIME_OCCURRENCE_FIELD > :sql_last_value"
    }

  }
output {
  stdout { codec => json_lines }
  elasticsearch {
  "hosts" => "localhost:9200"
  "index" => "test-migrate"
  "document_type" => "data"
  "document_id"   => "%{personid}"
  }
}

但是如果数据很大,logstash将在没有任何停止点的情况下检查整个数据中的新条目,那么这将降低可伸缩性并消耗更多的能量。
有没有其他方法或者类似的webhook,当新的数据被输入数据库时,mysql只会通知logstash新的数据或者logstash只会检查新的条目,请帮助

vyswwuz2

vyswwuz21#

你可以用 sql_last_start 查询中带有任何时间戳字段的参数(假设有一个类似 last_updated ).
例如,您的查询可能是,

WHERE last_updated >= :sql_last_start

从这个答案来看,
例如,第一次运行这个sql\u last\u start将是1970-01-01 00:00:00,您将得到所有行。第二次运行sql\u last\u start将是(例如)2015-12-03 10:55:00,查询将返回时间戳比该时间戳新的所有行。
或者你也可以使用 :sql_last_value ```
WHERE last_updated > :sql_last_value

相关问题