簡體   English   中英

使用kinesis流和firehose對流數據進行排序

[英]Ordering of streaming data with kinesis stream and firehose

我目前的項目存在架構困境,即近實時處理大量數據。 所以這是當前架構的圖表:

在此輸入圖像描述

以下是我的想法的解釋,這讓我想到了這張照片:

當API網關收到一個請求時,它被放入流中(這是因為我的應用程序的性質 - “火與忘記”) 這就是我得出的結論 。輸入數據根據特定請求在分片中分離屬性,保證我正確的順序。

然后我有一個lambda,它關心驗證輸入和異常檢測。 因此,它是一種抽象,可以保持下一層數據的清潔 - 數據豐富。 所以這個lambda將數據發送到kinesis firehose,因為它可以備份“原始”數據(我絕對想要的東西),還附加一個轉換lambda,它將進行濃縮 - 所以我不關心保存數據在S3中,它將開箱即用。 所以一切都很好,直到我需要保存的接收數據排序(富集程序正在進行會話化),這在firehose中丟失,因為在kinesis流中沒有數據分離。

所以我唯一能想到的就是 - 在第一個lambda中移動sissionization,這將破壞我的抽象,因為它將開始關注數據豐富,更大的缺點是備份數據將豐富其中的數據,也打破了架構。 所有這一切都在發生,因為在消防中缺少分片概念。

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

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

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

如果在備份中存儲會話信息是一個問題,則可能是會話的定義沒有很好地指定或者需要重新定義。 如果會話將來重新進行,則可以忽略已經計算的會話數據,只要有足夠的詳細信息記錄了足夠的額外數據以告知可能會話的不可預測的未來概念。

提供業務上下文(也稱為外部可識別數據)的附加富集應在先前記錄的邊界內以事務方式處理會話。

如果會話在業務級別不是事務性的,則會話的定義超出或低於指定。 如果是這種情況,您就不在流處理業務和批處理中,您需要將狀態擴展到可能的同時交錯會話的數量及其最大持續時間 - 查詢整個事件語料庫以支持會話希望可以控制的持續時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM