我有Cassandra DB,每个列值的TTL为X小时,这需要实时推送到ElasticSearch Cluster。
我见过past posts on StackOverflow建议使用LogStash等工具或直接从应用层推送数据。
但是,如何在 ES Version> = 5.0 中复制数据后保留导入数据的TTL?
答案 0 :(得分:0)
曾经有一个名为_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"
}
然后你可以:
一个。使用基于ttl_date
字段之一定期执行delete by query的cron,即从您的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过期。