当前位置: 首页 > 知识库问答 >
问题:

AWS Kinesis流作为FIFO队列

丁长卿
2023-03-14

我们目前有一个接收大量传感器数据的应用程序。每个传感器都有其独特的传感器id('5834F7718273F92CC326F620')并以不同的间隔发出其状态。传入消息的处理顺序并不重要,例如,一个传感器的较新消息可以在另一个传感器的较旧消息之前处理。然而,重要的是,给定传感器的每个消息必须按顺序处理;按照他们到达溪流的顺序。

我查看了Kinesis客户端库,了解到KCL将消息按每个碎片推送到单个处理器。这是否意味着,如果一个流只有一个碎片,它就只有一个处理器,这难道不会造成瓶颈吗?或者KCL有多个处理器,也许使用分区密钥可以确保永远不会并发处理具有相同分区密钥的消息?

注意:我们已经查看了sqs fifo,但排除了它,因为每秒300条消息的限制很快就会成为一个问题。

共有1个答案

段干昊然
2023-03-14

是的,每个碎片在给定时刻(每个应用程序)只能有一个处理器。

但是,您可以使用传感器id作为您的kinesis put记录请求的分区键。(见此处)

这将确保所有这些传感器事件都将进入相同的碎片和处理器。如果您这样做,您将能够伸缩您的进程和碎片,并且仍然可以在单个处理器中处理每个传感器事件

 类似资料:
  • 我们正在使用AMAZON SQS FIFO队列来处理我们应用程序的预约服务。一旦消息进入队列,它就会触发Amazon Lambda函数来管理预订过程。因为它是一个FIFO队列,所以我们确保如果有2个人请求相同的插槽,那么这个插槽将给第一个请求者。我的问题是:是否有一种方法(也许是SQS FIFO队列中的设置?)这确保了在前一条消息执行完毕之前,一条消息不会触发Amazon Lambda函数。我只是

  • 我有一个web服务器(比如tomcat),它为http请求服务 每个请求处理都可能生成一些跟踪信息。 我将把这些跟踪信息写入编年史队列(以字节[]为单位,我将自己进行编组/解编组,就像使用protobuf一样) 我将有一个专用的线程来使用裁剪器从编年史队列中读取。每个消息将只处理一次,如果失败,我将使用自己的重试策略将其放回队列以允许下次尝试。 基于以上用例,我有以下问题: > 应该使用多少追加器

  • 我已将FIFO队列作为目标添加到我们的自定义事件总线中。 当eventbridge连接到FIO队列时,需要MessageGroupId属性。 是否可以动态配置该值? 例如:我有一个FIFO队列,我把来自不同用户的事件。每个事件,在细节属性内,有一个属性uuid与用户标识符。我想使用这个属性,而不是e常量值作为MessageGroupId。这样,同一用户的所有事件都将按顺序处理。 谢谢你!

  • 我需要一个简单的FIFO实现的队列来存储一堆整数(我不介意它是泛型实现)。 在或Trove/Guava库中已经为我烘焙了什么?

  • 我试图用SQS FIFO队列探索SNS FIFO主题,这就是我刚才尝试的。我创建了SNS FIFO主题和SQS FIFO队列,并将FIFO队列订阅到FIFO主题。根据文档,对于上述设置,每当我们将消息发布到SNS FIFO队列时,它都应该将该消息扇出到SQS队列,但它没有发生。我能够获得PublishResult#getMessageId()表示发布部分正在成功进行,但队列中没有任何消息。由于SN

  • 我有一个关于多使用者并发的问题。我想发送工作到rabbitmq来自web请求到分布式队列。我只想确定多队列中的工作顺序(FIFO)。因为此请求来自不同的用户,所以必须对eech用户请求/工作进行排序。 我已经在Azure ServiceBus和ActiveMQ消息分组上发现了这个具有不同名称的特性。 我想保证客户的要求必须相互订购。每个客户可能有多个请求,但必须按顺序处理针对该客户的请求。我希望在