Cassandra 卡桑德拉·卡夫卡连接源代码和最终一致性

Cassandra 卡桑德拉·卡夫卡连接源代码和最终一致性,cassandra,apache-kafka,eventual-consistency,apache-kafka-connect,Cassandra,Apache Kafka,Eventual Consistency,Apache Kafka Connect,我正在考虑使用卡夫卡连接将卡桑德拉的更新流到卡夫卡主题。StreamReactor的现有连接器似乎使用时间戳或uuidtimestamp来提取自上次轮询以来的新更改。在insert语句中使用now()插入时间戳的值。然后,连接器会保存上次接收的最长时间 由于Cassandra最终是一致的,我想知道当使用时间范围进行重复查询以获得新的更改时,实际会发生什么。在使用WHERE create>=MaxTimeFoundsFar时,是否存在丢失插入到Cassandra中的行的风险,因为它“迟到”到查询的

我正在考虑使用卡夫卡连接将卡桑德拉的更新流到卡夫卡主题。StreamReactor的现有连接器似乎使用时间戳或uuidtimestamp来提取自上次轮询以来的新更改。在insert语句中使用now()插入时间戳的值。然后,连接器会保存上次接收的最长时间


由于Cassandra最终是一致的,我想知道当使用时间范围进行重复查询以获得新的更改时,实际会发生什么。在使用WHERE create>=MaxTimeFoundsFar时,是否存在丢失插入到Cassandra中的行的风险,因为它“迟到”到查询的节点?

是的,如果您使用一致性级别1进行读写,则当您已经继续处理时,您的“光标”前面可能有较新的数据,但是,即使使用更高的一致性,也可能会遇到“问题”,具体取决于您的设置。基本上有很多事情会出错

您可以通过使用旧的cassandra公式
NUM\u NODES\u RESPONDING\u TO\u READ+NUM\u NODES\u RESPONDING\u TO\u WRITE>REPLICATION\u FACTOR
来增加不这样做的机会,但因为您现在使用的是
now()
cassandra的节点时钟之间可能有毫秒偏移,因此如果有高频数据,甚至可能会丢失数据。我知道一些系统中,人们实际上使用带gps模块的树莓pi来保持时钟非常紧:)

您必须提供更多关于您的用例的信息,但实际上,如果您不“小心”,您可以完全跳过一些插入,但即使这样,也没有100%的保证,然后您使用一些偏移量处理数据,这些偏移量足以让新数据进入并解决

基本上,你必须在过去保留一些移动的时间窗口,然后移动它,并确保你不考虑任何比最后一分钟更新的内容。这样,您就可以确保数据“稳定”

我有一些用例,在这些用例中,我们处理的感官数据会延迟好几天。在一些项目中,我们只是忽略了它,在一些项目中,数据是用于报告月份级别的数据,因此我们总是处理旧数据并将其添加到报告数据库中。i、 我们在历史上保留了3天的时间窗口


这取决于您的用例。

谢谢您的回答。所以我的假设并不是完全错误的。我在考虑将卡桑德拉的数据发布到卡夫卡,以便将数据“实时”推送给其他消费者。我真的不想丢失数据,所以我的方法可能并不理想