我正在用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只会检查新的条目,请帮助
1条答案
按热度按时间vyswwuz21#
你可以用
sql_last_start
查询中带有任何时间戳字段的参数(假设有一个类似last_updated
).例如,您的查询可能是,
从这个答案来看,
例如,第一次运行这个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