问题描述
我正在开发一个将读取和分析付款交易日志的应用程序。我知道我会根据自己的需求使用Kinesis Analytics,它会从数据流和Firehose中获取输入。但是我在确定我的系统应该使用哪种输入方法时遇到了麻烦。 我的要求是:
- 它可以容忍延迟,但数据不应丢失数据。
- 必须将所有错误记录在DynamoDB或S3存储桶中。
哪个输入流适合我的用例?
解决方法
Kinesis Stream(KS)和Firehose(FH)之间有一些主要区别:
- KS是实时的,而FH是近实时的。
- KS需要手动扩展和设置其供应(分片),而FH基本上是无服务器的。
- KS记录是不可变的(它们在流中保留其保留期-默认为24h),而FH中的记录在传递到目的地时就从FH中消失了。
从您写的内容来看,我认为应该首先考虑FH,因为您并不担心FH的非实时性,它更易于管理和设置,并且可以specify S3 as a backup处理失败或所有消息:
Kinesis Data Firehose使用Amazon S3 仅备份所有尝试传送到您所选目的地的数据。
如果传递或lambda处理失败,则S3备份可确保您不会丢失记录。随后,在我看来, Firehose很好地解决了您的两点问题。
,数据流与Firehose
- 信息流:
Kinesis数据流是高度可定制的,最适合开发人员构建定制应用程序或流化数据以满足特定需求。
- 要编写自定义代码
- 实时(经典延迟200ms,增强扇出延迟70ms)
- 您必须管理缩放(碎片拆分/合并)
- 数据存储1到7天,具有重放功能,可容纳多个用户
- 与Lambda一起使用,以将数据实时插入ElasticSearch
- 消防水带:
Firehose可以将数据流直接加载到AWS产品中进行处理。
- 完全托管,发送到S3,Splunk,Redshift,ElasticSearch
- 使用Lambda进行无服务器数据转换
- 接近实时(最短缓冲时间为1分钟)
- 自动缩放
- 没有数据存储
Kinesis数据流允许消费者读取流数据。它为您提供了很多选择。最适合需要自定义处理,流处理框架选择和亚秒级处理延迟的用例。 数据可靠地存储在长达7天的流中,并分布在3个可用区中。
Kinesis Firehose用于加载流数据到目标目的地(S3,Elasticsearch,Splunk等)。您还可以在将流数据加载到目标之前对其进行转换(通过使用Lambda)。 尝试失败的数据将保存到S3。
因此,如果您的目标是仅在尝试Kinesis Firehose时仅以最少的预处理或不进行任何预处理就将数据加载到Kinesis Data Analytics服务。
请注意,选择适当的服务时,您还需要考虑成本,开发工作,扩展选项,数据量等方面。
请查看以下AWS解决方案实施以供参考: https://aws.amazon.com/solutions/implementations/real-time-web-analytics-with-kinesis/ https://aws.amazon.com/solutions/implementations/real-time-iot-device-monitoring-with-kinesis/
,您可以使用 firehose 进行分析,但问题是 firehose 如何获取数据?您可以编写自己的代码来提供数据或使用 kinesis 数据流。 Firehose 主要是流数据的传输系统,可以写入到各种目的地,例如 S3、Redshift 或其他具有执行数据转换能力的可选能力。
查看此链接 https://www.slideshare.net/AmazonWebServices/abd217from-batch-to-streaming?from_action=save,了解您的用例如何从这些信息中受益。
更多信息:https://docs.aws.amazon.com/kinesisanalytics/latest/dev/how-it-works.html https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html