1

對於我近期實時處理大量數據的項目,我有一個架構困境。因此,這裏是目前的架構圖:使用kinesis流和流水線對流數據進行排序

enter image description here

這裏是我的想法的解釋,這使我那張照片:

當API網關接收它把數據流中的請求(這是因爲我的應用 - 「射後不理的性質)That's how I came up to that conclusion,輸入數據在此基礎上保證了我正確的順序一個特定的請求屬性碎片分離。

然後,我有哪管它一個lambda用於驗證輸入和異常檢測,這是一種抽象,可以保持數據的下一層的數據清潔 - 數據豐富。所以這個lambda將數據發送到kinesis firehose,因爲它可以備份「原始」數據(我肯定希望擁有這些數據),並且還附加了一個轉換lambda,它將進行富集 - 因此我不會在意保存數據在S3中,它會從盒子裏出來。所以一切都很好,直到我需要一個保存的接收數據排序的時候(濃縮器正在進行會話化),這在流水線中丟失了,因爲沒有數據分離,因爲它在kinesis流中。

所以我唯一能想到的就是在第一個lambda中移動分割,這將破壞我的抽象,因爲它將開始關注數據豐富,而更大的缺點是備份數據將豐富數據在裏面,這也是打破了架構。而所有這一切都是因爲失敗的分裂概念而發生的。

那麼有人可以想到這個問題的解決方案,而不會失去aws爲我們提供的開箱即用功能嗎?

回答

0

我認爲會話化和數據豐富是兩種不同的抽象,需要在lambdas之間進行拆分。

會話是一個時間限制,嚴格按照目的或任務限定的事件流。您只能在第一個lambda階段(來自kinesis流分類)獲取該信息,並且應該在來源處標記具有會話上下文的流,並且可以限制會話。

如果將會話信息存儲在備份中存在問題,則可能是會話的定義沒有很好地指定或需要重新定義。如果會話有待將來重鑄,那麼已經計算的會話數據可以被忽略,只要提供了足夠的附加數據以通知未來不可預測的會話的未來概念,並且已經記錄了足夠多的細節。

提供業務上下文(又名外部可識別數據)的額外增強應該在先前記錄的邊界內以事務方式處理會話。

如果會話在業務級別上不是事務性的,則會話的定義已超出或未滿指定。如果是這樣的話,你就不在流處理業務和批處理中,你需要將狀態擴展到可能的同時交錯會話的數量和它們的最大持續時間 - 查詢整個事件語句以括住希望可以控制的持續時間。