如何将AWS Kinesis流用于多个不同的数据源

问题描述 投票:0回答:1

我们有一个传统的批处理应用程序,我们从多个来源(Oracle,Salesforce,FTP文件,Web日志等)中提取数据。我们将传入的数据存储在S3存储桶中,并在EMR上运行Spark以处理数据并在S3和Redshift上加载。

现在我们正在考虑通过引入AWS Kinesis然后使用来自EMR的Spark Structured Streaming处理流数据并将其加载到S3和Redshift来实现近乎实时的应用程序。鉴于我们有不同种类的数据,例如来自Oracle的100多个表,100多个salesforce对象,来自FTP位置的20多个文件,Web日志等。这里使用AWS Kinesis的最佳方式是什么。

1)为每个源(Salesforce,Oracle,FTP)使用单独的流,然后为每个表/对象使用单独的分片(在流中) - 每个使用者从其自己的分片中读取具有特定表/文件的分片2)使用每个表/对象的单独流 - 在这种情况下,我们最终将拥有500多个流。 3)使用单个流来处理所有事情 - 不确定消费者应用程序在这种情况下如何读取数据。

spark-streaming amazon-emr amazon-kinesis
1个回答
0
投票

Kinesis不关心你把什么数据放到流中,数据只是Kinesis的一个blob。由您决定(编码)流的编写者和读者。您可以将不同类型的数据混合到一个流中,然后消费者需要弄清楚每个blob是什么以及如何处理它。

我会根据数据的数据类型和优先级将其分成多个流。这将使实现和调试变得更加容易。

我认为你误解了什么是碎片。它们用于性能而不用于数据分离。

© www.soinside.com 2019 - 2024. All rights reserved.