使用kinesis流和firehose对流数据进行排序

时间:2017-04-04 09:06:55

标签: amazon-web-services amazon-s3 aws-lambda amazon-kinesis amazon-kinesis-firehose

我目前的项目存在架构困境,即近实时处理大量数据。所以这是当前架构的图表:

enter image description here

以下是我的想法的解释,这让我想到了这张照片:

当API网关接收到请求时,它会被放入流中(这是因为我的应用程序的性质 - “一劳永逸”)That's how I came up to that conclusion。输入数据根据特定请求在分片中分离属性,保证我正确的顺序。

然后我有一个lambda,它关心验证输入和异常检测。因此,它是一种抽象,可以保持下一层数据的清洁 - 数据丰富。所以这个lambda将数据发送到kinesis firehose,因为它可以备份“原始”数据(我绝对想要的东西),还附加一个转换lambda,它将进行浓缩 - 所以我不关心保存数据在S3中,它将开箱即用。所以一切都很好,直到我需要保存的接收数据排序(富集程序正在进行会话化),这在firehose中丢失,因为在kinesis流中没有数据分离。

所以我唯一能想到的就是 - 在第一个lambda中移动sissionization,这将打破我的抽象,因为它将开始关注数据丰富,更大的缺点是备份数据将丰富数据它,这也打破了架构。所有这一切都在发生,因为在消防局中缺少分片概念。

那么有人能想到解决这个问题而不会失去aws为我们提供的开箱即用功能吗?

1 个答案:

答案 0 :(得分:0)

我认为会话化和数据丰富是两种不同的抽象,需要在lambdas之间进行分割。

会话是受目的或任务限制的时间限制,严格排序的事件流。您只在第一个lambda阶段(来自kinesis流分类)获得该信息,并且应该在源处标记具有会话上下文的流,并且可以限制会话。

如果在备份中存储会话信息是一个问题,则可能是会话的定义未明确指定或可能需要重新定义。如果会话需要进行重新规划,则可以忽略已经计算的会话数据,前提是有足够的额外数据来通知可能会话的不可预测的未来概念,并且已经记录了足够的细节。

提供业务背景(也称为外部可识别数据)的额外增益应在先前记录的边界内以事务方式处理会话。

如果会话在业务级别不是事务性的,则会话的定义超出或低于指定。如果是这种情况,您就不在流处理业务和批处理中,您需要将状态扩展到可能的同时交错会话的数量及其最大持续时间 - 查询整个事件语料库以支持会话希望可以控制的持续时间。