我有Cassandra DB,其数据的每个列值的TTL为X小时,因此需要实时将其推送到ElasticSearch Cluster。
我见过past posts on StackOverflow建议使用LogStash之类的工具或直接从应用程序层推送数据。
但是,在ES版本> = 5.0中复制数据后,如何保存导入的数据的TTL?
最佳答案
曾经有一个名为_ttl
的字段,分别为deprecated in ES 2.0和removed in ES 5.0。
从ES 5开始,现在有两种保留数据TTL的官方方法。首先,请确保在ES文档中创建一个TTL字段,该字段将设置为Cassandra中行的创建日期+ TTL秒。因此,如果在Cassandra中有这样的记录:
INSERT INTO keyspace.table (userid, creation_date, name)
VALUES (3715e600-2eb0-11e2-81c1-0800200c9a66, '2017-05-24', 'Mary')
USING TTL 86400;
然后在ES中,应将以下文档导出到ES:
{
"userid": "3715e600-2eb0-11e2-81c1-0800200c9a66",
"name": "mary",
"creation_date": "2017-05-24T00:00:00.000Z",
"ttl_date": "2017-05-25T00:00:00.000Z"
}
然后您可以:
答:使用一个cron,它将根据您的
ttl_date
字段之一定期执行delete by query,即从cron调用以下命令:curl -XPOST localhost:9200/your_index/_delete_by_query -d '{
"query": {
"range": {
"ttl_date": {
"lt": "now"
}
}
}
}'
B.或者使用基于时间的索引,并将每个文档插入与其
ttl_date
字段匹配的索引中。例如,以上文档将插入名为your_index-2017-05-25
的索引中。然后,使用curator tool您可以轻松地delete indices已过期。关于mysql - 具有TTL持久性的数据从Cassandra实时复制到ElasticSearch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44166701/