2016-01-16 39 views
4

我讀了官方AWS Kinesis Firehose的文檔,但沒有提及如何處理重複的事件。有沒有人有經驗呢?我搜索了一些人使用ElasticCache進行過​​濾,這是否意味着我需要使用AWS Lambda來封裝過濾邏輯?是否有任何簡單的方法像Firehose將數據攝入Redshift中,同時具有「恰好一次」的語義?非常感謝!如何對從AWS Kinesis Firehose到Redshift的記錄進行重複數據刪除?

+0

嗨!你能鏈接或引用這樣的文件嗎?謝謝。 – MattAllegro

+1

您在這裏:http://blog.flux7.com/amazon-kinesis-a-use-case –

回答

9

您可以在Kinesis Stream的兩側進行復制。您可能會將相同的事件兩次放入流中,並且可能會由消費者兩次讀取事件。

如果您嘗試將事件放入Kinesis流中,但由於某種原因,您不確定它是否成功寫入,並且您決定再次放入,生產者端可能會發生。如果您正在獲取一批事件並開始處理它們,並且在設法檢查您的位置之前崩潰,並且下一個工作人員正在從Kinesis流中選擇同一批事件(基於上一個檢查點)序列ID。

在你開始解決這個問題之前,你應該評估你有多少次這樣的重複以及這種重複對業務有什麼影響。並非每個系統都在處理不能容忍重複的金融交易。但是,如果您決定需要重複數據刪除,則解決該問題的常用方法是使用某個事件ID並追蹤是否已處理該事件ID。

ElasticCache with Redis是一個跟蹤事件ID的好地方。每次你選擇一個事件進行處理時,你都會檢查你是否已經在Redis的哈希表中找到了它,如果你找到它,就跳過它,如果你沒有找到它,就把它添加到表中基於這種重複的可能時間窗口的一些TTL)。

如果您選擇使用Kinesis Firehose(而不是Kinesis Streams),則不再控制消費者應用程序,並且無法實現此過程。因此,您可能希望在生產者端運行這種重複數據刪除邏輯,轉而使用Kinesis Streams並在Lambda或KCL中運行您自己的代碼,或者在Redshift中解決重複數據刪除功能(見下文)。

如果您對複製不太敏感,則可以在Redshift中使用一些函數,例如WINDOW函數中的COUNT DISTINCT或LAST_VALUE。

+0

感謝您的回答。我的用例場景是財務計算,因此它不能容忍重複。我現在關心的是在這種重複數據刪除用例中應該使用哪種類型的ElasticCache? Memcache或Redis。 –

+0

可能Redis,更好的TPS和密鑰的內存大小非常小,並且可以適合單個實例。 – Guy

相關問題