【问题标题】:Is there any difference in processing times between AWS Kinesis Firehose and Streams?AWS Kinesis Firehose 和 Streams 之间的处理时间有什么不同吗?
【发布时间】:2017-11-20 08:30:05
【问题描述】:
阅读这两种产品(Firehose 和 Streams)的文档,听起来 Firehose 是“接近”实时的,在生成消息到发出消息之间可能会有 60 秒的延迟,而 Streams 文档没有提到这一点潜在的延迟。
是否有人对消息传递时间方面的任何差异有任何真实的见解?
[备注]
链接到 Firehose FAQ 提及延迟,基于 S3 事件的缓冲区大小。
【问题讨论】:
标签:
amazon-web-services
amazon-kinesis
amazon-kinesis-firehose
【解决方案2】:
在深入研究之后,我发现 Firehose 上的缓冲区/时间设置确实增加了额外的延迟。但是,Firehose 的用例(至少对我而言)是不正确的。似乎如果您可以允许延迟,Firehose 是更简单的前进方式,显然如果您只是摄取数据以进行下游分析。对于实时而言,Kinesis Streams 是前进的方向,因为延迟取决于应用程序。
【解决方案3】:
使用 Kinesis Streams,您可以将处理时间缩短到一秒以下。在我当前的流中,Kinesis 部分的延迟似乎是 5.5 毫秒,而使用 Lambda 函数处理记录的延迟似乎是 330 毫秒。即批量大小为 1,这意味着 lambda 函数会一个一个地处理记录。
Kinesis Streams 可能有点贵。为了节省一些钱,我在另一个吞吐量更高的流中使用了 500 的批大小。这增加了几分钟的延迟。
Firehose 通常便宜得多,但功能有限。如果您正在流式传输大量数据(超过 1 MB/分钟),您可以通过添加缓冲区大小提示将平均处理时间降低到 60 秒。
【解决方案4】:
这让我很吃惊,促使我进行调查并报告我的发现。我曾看到 Firehose 在多种架构中用作过渡,在这种情况下,增加一分钟的延迟可能会适得其反。此外,压力下的水压可能误导了我,它更关心的是控制和引导压力。流体动力学总是很难。
buffer size and buffer interval
Kinesis Data Firehose 将传入的流数据缓冲到特定大小或一段时间,然后再将其传送到目标。 缓冲区大小以 MB 为单位,缓冲区间隔以秒为单位。
来自what is firehose?
目标的缓冲区大小和缓冲区间隔
Kinesis Data Firehose 在将传入数据传送到指定目标之前对其进行缓冲。对于作为您选择的目标的 Amazon S3、Amazon Redshift 和 Splunk,您可以选择 1–128 MiBs 的缓冲区大小和 60–900 秒的缓冲区间隔。对于作为您选择的目标的 Amazon Elasticsearch,您可以选择 1–100 MiB 的缓冲区大小和 60–900 秒的缓冲区间隔。对于 HTTP 端点目标,包括 Datadog 和 New Relic,您可以选择 1-64 MiB 的缓冲区大小和 60-900 秒的缓冲区间隔。对于 MongoDB Cloud,您可以选择 1-16 MiB 的缓冲区大小和 60-900 秒的缓冲区间隔。
来自configuration settings