我有Cassandra DB,其数据的每个列值的TTL为X小时,因此需要实时将其推送到ElasticSearch Cluster。

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

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

最佳答案

曾经有一个名为_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"
}


然后您可以:

答:使用一个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/

10-13 05:01