簡體   English   中英

從Kinesis中的兩個不同流中獲取數據?

[英]Getting Data from two different Streams in Kinesis?

我正在嘗試成為Kinesis Consumer Client。 為此,我瀏覽了Kinesis開發人員指南和AWS文檔http://docs.aws.amazon.com/kinesis/latest/dev/kinesis-record-processor-implementation-app-java.html

我想知道是否有可能從兩個不同的流中獲取數據並進行相應處理。

假設我有兩個不同的Streams stream1stream2

是否可以從流和流程中分別獲取數據?

為什么不? 從兩個流中獲取get_records。

如果流中每個流只有一個分片,那么您還將看到所有事件,因為建議使用一個工作程序處理每個分片,但是如果您的邏輯是通過某種方式將來自不同源/流的事件聯接在一起,則可以實現它一個工人從兩個流中讀取。

請注意,如果您的流具有多個分片,則每個工作人員將僅看到事件的一部分。 您可以選擇以下選項:

  • 兩個流都有一個單獨的分片-在這種情況下,您可以使用單個工作程序從bout流中讀取數據,並查看兩個流中的所有事件。 您可以添加時間戳或其他鍵,以允許您在工作程序中“加入”這些事件。

  • 一個流( 流1)有一個碎片,並與多個碎片第二流( 流2) -在這種情況下,你可以從流1從您的所有工作人員,也將從STREAM2每個處理單碎片閱讀。 您的每個工作人員都將看到stream1的所有事件以及stream2的事件份額 請注意,使用單個分片(2MB /秒或5個讀取/秒)可以從stream1讀取事件的速度受到限制 ,並且如果stream2中有許多分片,這可能是一個實際的限制。

  • 兩個流都可以有多個分片-在這種情況下,要確保您能夠“加入”這些事件,這將變得更加復雜,因為您需要將寫入和讀取都同步到這些流。 您也可以使用一個工作程序讀取兩個流的所有分片,但這不是一個好習慣,因為這將限制擴展能力,因為您再也沒有分布式系統了。 另一個選擇是在兩個流中使用相同的partition_key ,並為兩個流使用相同數量的分片和分區定義,並驗證您是否從每個工作線程中的每個流的“正確”分片中讀取數據,並且每次您的一個工作人員發生故障並重新啟動時,都可以正確執行此操作,這可能會有些復雜。

您可以考慮的另一種選擇是將兩種類型的事件都寫在單個流中,再次使用相同的partition_key ,然后如果需要以不同方式處理它們(例如,將它們寫入不同的日志文件),則在讀取器端對其進行過濾。在S3中)。

暫無
暫無

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

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