使用 TTL Persistance 从 Cassandra 到 ElasticSearch 的实时数据复制

Real time copy of data with TTL Persistance from Cassandra to ElasticSearch

我有 Cassandra 数据库,其中的数据每个列值的 TTL 为 X 小时,这需要实时推送到 ElasticSearch 集群。

我看到 past posts on Whosebug 建议使用 LogStash 等工具或直接从应用层推送数据。

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

曾经有一个名为 _ttl 的字段已 deprecated in ES 2.0 and 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"
      } 
    }
  }
}'

乙。或者使用基于时间的索引并将每个文档插入与其 ttl_date 字段匹配的索引中。例如,上面的文档将被插入到名为 your_index-2017-05-25 的索引中。然后用过期的curator tool you can easily delete indices