Apache kafka 使用TTL将数据从一个Cassandra表复制到另一个Cassandra表

Apache kafka 使用TTL将数据从一个Cassandra表复制到另一个Cassandra表,apache-kafka,cassandra,apache-storm,cassandra-3.0,Apache Kafka,Cassandra,Apache Storm,Cassandra 3.0,我们正在通过从分区键中删除一列来更改一个表的分区键。此表中的每条记录也有TTL。现在我们想用TTL保存该表中的数据。 我们怎么做 我们可以使用所需的模式创建新表,然后将数据从旧表复制到新表。然而,我们在这个过程中失去了TTL 有关更多信息,此Cassandra表由从Kafka读取事件的Apache Storm应用程序填充。我们可以重新添加卡夫卡消息,但卡夫卡有一些我们不想处理的不需要的消息 注意-TTL是根据日期列值决定的,该值永远不会更改。因为所有列上的TTL都是相同的。在进入具体实现之前,必

我们正在通过从分区键中删除一列来更改一个表的分区键。此表中的每条记录也有TTL。现在我们想用TTL保存该表中的数据。 我们怎么做

我们可以使用所需的模式创建新表,然后将数据从旧表复制到新表。然而,我们在这个过程中失去了TTL

有关更多信息,此Cassandra表由从Kafka读取事件的Apache Storm应用程序填充。我们可以重新添加卡夫卡消息,但卡夫卡有一些我们不想处理的不需要的消息


注意-TTL是根据日期列值决定的,该值永远不会更改。因为所有列上的TTL都是相同的。

在进入具体实现之前,必须了解TTL可能存在于单个单元格以及行中的所有单元格上。在执行INSERT或UPDATE操作时,只能对查询中指定的所有列应用一个TTL值,因此,如果有两列具有不同的TTL,则需要对每列执行两个具有不同TTL的查询

关于工具-这里有两个或多或少的准备使用选项:

  • 使用。在的示例30.1中详细描述了该方法。基本上,您需要使用查询将数据卸载到磁盘,该查询将为数据提取列值&TTL,然后通过为每个具有单独TTL的列生成批来加载数据。例如:
dsbulk unload-h localhost-query\
“从dsbulkblog.iris\u中选择id、花瓣长度、写入时间(花瓣长度)作为w花瓣长度、TTL(花瓣长度)作为l花瓣长度,…。”\
-url/tmp/dsbulkblog/migrate
dsbulk load-h localhost-query\
“开始批量插入到dsbulkblog.iris\u,使用时间戳:w\u petal\u length和TTL:l\u petal\u length;使用\u id(id,petal\u length)值(:id,:petal\u length)…应用批处理;”\
-url/tmp/dsbulkblog/migrate--batch.mode已禁用
  • 使用-它支持使用TTL和WriteTime读取和写入数据。但您需要开发执行此操作的代码,并正确处理集合、静态列等(或等待实现)

TTL是根据日期列值决定的,该值永远不会改变。因此,所有列上的TTL都是相同的。然后使用DSBulk,您可以只卸载一列的TTL,然后使用一个值将其加载回,而无需构建批处理—只需执行插入即可