【问题标题】:How to use AWS Kinesis streams for multiple different data sources如何将 AWS Kinesis 流用于多个不同的数据源
【发布时间】:2018-09-09 23:03:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: spark-streaming amazon-emr amazon-kinesis


    【解决方案1】:

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

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

    我认为您误解了分片是什么。它们是为了性能,而不是为了数据分离。

    【讨论】:

    • 谢谢,有道理。所以对于每个不同的对象或文件,我们可以有一个单独的运动流。对于我们需要更好性能的对象,我们可以有超过 1 个分片。
    • 是的,您将使用超过 1 个分片。粗略的规则是在写入分片时每秒每 1 MB 数据(或 1,000 条记录)一个分片。一个分片支持 2 MB/秒的读取速度。注意:我更喜欢您将所有内容存储在 S3 中,然后使用 EMR + Spark 进行处理的原始方法。原因是 S3 的 EMRFS 速度如此之快,并且您不需要大量的 EMR 存储 (HDFS) 来保存流中的数据。但是,您的新方法带来了实时功能。
    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 2019-08-20
    • 2020-06-25
    • 1970-01-01
    • 2020-07-02
    • 2021-11-02
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多