1

我在考慮使用Kafka連接將來自Cassandra的更新流傳輸到Kafka主題。來自StreamReactor的現有連接器似乎使用時間戳或uuidtimestamp來提取自上次輪詢以來的新更改。時間戳的值在插入語句中使用now()插入。連接器然後保存上次收到的最大時間。cassandra kafka連接源和最終一致性

由於Cassandra最終是一致的,我想知道在使用時間範圍進行重複查詢以獲得新更改時實際發生了什麼。是否有風險錯過插入到Cassandra中的行,因爲在使用WHERE create> = maxTimeFoundSoFar時,它會「延遲到」查詢的節點?

回答

1

是的,它可能發生,你有新的數據在你的「光標」面前的時候,你已經去與處理,如果您使用的一致性水平一個用於讀取和寫入,但即使你使用更高的一致性,你可能會遇到「問題」取決於你的設置。基本上有很多事情可能會出錯。

您可以通過使用舊的卡桑德拉式NUM_NODES_RESPONDING_TO_READ + NUM_NODES_RESPONDING_TO_WRITE > REPLICATION_FACTOR增加不這樣做的機會,但因爲使用的是now()從卡桑德拉節點時鐘可能有他們之間的毫秒偏移量,所以你甚至可能會錯過的數據,如果你有高頻率數據。我知道一些系統,人們實際上使用gps模塊的樹莓派來保持時鐘偏斜非常緊密:)

你將不得不提供更多關於你的用例,但事實上是的,你可以完全跳過一些插入,如果你並不是「謹慎」的,但即使如此,也沒有100%的保證,除非您處理數據的數據有足夠的偏移量,足以讓新數據進入並解決。

基本上你就必須保持在過去的一些移動時間窗口,然後沿再加確保你不考慮什麼比讓我們說最後一分鐘更新的移動。這樣你就可以確保數據「穩定」。

我不得不在這裏我們處理,將排在與延遲多天感覺數據的一些使用情況。在某些項目中,我們忽略了一些數據用於報告月份的數據,因此我們總是處理舊數據並將其添加到報告數據庫。即我們在歷史3天前保持了一個時間窗口。

這只是取決於你的使用情況。

+1

感謝您的回答。所以我的假設並不完全錯誤。我想從卡桑德拉發佈的數據卡夫卡的數據推給其他消費者的「實時」的。我不想丟失數據,所以我的方法可能不理想 – KTrum