我们有一个传统的批处理应用程序,其中我们从多个来源(Oracle,Salesforce,FTP文件,Web日志等)中提取数据。我们将传入的数据存储在S3存储桶中,并在EMR上运行Spark以处理数据并在S3和Redshift上加载。
现在,我们正在考虑通过引入AWS Kinesis,然后使用来自EMR的Spark结构化流处理来处理流数据并将其加载到S3和Redshift,从而近乎实时地制作此应用程序。鉴于我们拥有各种不同的数据,例如来自Oracle的100多个表,100多个salesforce对象,来自FTP位置,Web日志等的20多个文件。在这里使用AWS Kinesis的最佳方法是什么。
1)对每个源(Salesforce,Oracle,FTP)使用单独的流,然后对每个表/对象使用单独的分片(在流中)-每个使用者都从自己的具有特定表/文件的分片中读取 2)为每个表/对象使用单独的流-在这种情况下,我们最终将拥有500多个流。 3)为所有内容使用单个流-不确定在这种情况下消费者应用程序将如何读取数据。
答案 0 :(得分:0)
Kinesis并不关心您将什么数据放入流中,数据只是Kinesis的一大块。由您决定流的作者和读者(编码)。您可以将不同类型的数据混合到一个流中,然后消费者将需要弄清楚每个Blob是什么以及如何处理它。
我会根据数据类型和数据优先级将其分为多个流。这将使实现和调试更加容易。
我认为您误解了碎片。它们是为了性能而不是数据分离。