【问题标题】:Is there a way to put data into Kinesis Firehose from S3 bucket?有没有办法将数据从 S3 存储桶放入 Kinesis Firehose?
【发布时间】:2017-08-14 20:27:06
【问题描述】:

我想通过 Firehose 将流数据从 S3 存储桶写入 Redshift,因为数据是实时流式传输的(每分钟 600 个文件),我不希望任何形式的数据丢失。

如何将 S3 中的数据放入 Kinesis Firehose?

【问题讨论】:

  • 欢迎来到 StackOverflow! “从 S3 存储桶流式传输数据”是什么意思?数据是如何发送到 S3 的?是否有可能更改该发送实体以将其发送到 Firehose 而不是 S3?一旦数据进入 Firehose,您将如何处理这些数据?
  • 数据来自 SFTP 服务器,一旦数据进入 S3,我想将其存储在 Redshift 中。为了避免数据丢失,我想将数据放入 firehose 流,然后存储到 Redshift。

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-redshift amazon-kinesis


【解决方案1】:

看来你的情况是:

  • 文件从 SFTP 服务器随机出现在 S3 中
  • 您希望将数据加载到 Redshift 中

有两种基本方法可以做到这一点:

  • 将数据直接从 Amazon S3 加载到 Amazon Redshift,或
  • 通过 Amazon Kinesis Firehose 发送数据

坦率地说,通过 Kinesis Firehose 发送它并没有什么好处,因为 Kinesis 只会将其批量化,将其存储到临时 S3 文件中,然后将其加载到 Redshift 中。因此,这不是一个有益的方法。

相反,我会推荐:

  • 在 Amazon S3 存储桶上配置一个事件,以便在创建文件时向 Amazon SQS 队列发送一条消息
  • 配置 Amazon CloudWatch Events 以定期触发 AWS Lambda 函数(例如,每小时、每 15 分钟或任何满足您业务需求的时间)
  • AWS Lambda 函数从 SQS 读取消息并构造 manifest file,然后触发 Redshift 导入清单文件中列出的文件

这是一个简单、松散耦合的解决方案,比 Firehose 方法简单得多(后者需要以某种方式读取每个文件并将内容发送到 Firehose)。

【讨论】:

    【解决方案2】:

    实际上它的设计目的正好相反,Firehose 将传入的流数据发送到 Amazon S3 而不是 Amazon S3,并且除了 S3,它还可以将数据发送到其他服务,例如Redshift 和 Elasticsearch 服务。

    我不知道这是否能解决您的问题,但您可以使用COPY from S3 进行红移。

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 2020-07-26
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多