使用Tss Persistance从Cassandra到ElasticSearch的实时数据副本

时间:2017-05-24 19:09:19

标签: mysql elasticsearch cassandra logstash ttl

我有Cassandra DB,每个列值的TTL为X小时,这需要实时推送到ElasticSearch Cluster。

我见过past posts on StackOverflow建议使用LogStash等工具或直接从应用层推送数据。

但是,如何在 ES Version> = 5.0 中复制数据后保留导入数据的TTL?

1 个答案:

答案 0 :(得分:0)

曾经有一个名为_ttl的字段deprecated in ES 2.0removed 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过期。