AWS Kinesis Stream 作为 FIFO 队列
AWS Kinesis Stream as FIFO queue
我们目前有一个接收大量传感器数据的应用程序。每个传感器都有自己唯一的传感器 ID(例如“5834f7718273f92cc326f620”)并以不同的时间间隔发出其状态。传入消息的处理顺序并不重要,例如,一个传感器的较新消息可以在另一个传感器的较旧消息之前处理。但重要的是,给定传感器的每条消息都必须按顺序处理;按照他们到达溪流的顺序。
我查看了 Kinesis Client Library,了解到 KCL 将消息推送到每个分片的单个处理器。这是否意味着如果一个流只有一个分片,它将只有一个处理器,这不会造成瓶颈吗?或者 KCL 是否有多个处理器,并且不知何故,也许使用分区键可以确保永远不会同时处理具有相同分区键的消息?
注意:我们查看了 sqs fifo,但将其排除在外,因为每秒 300 条消息的限制很快就会成为问题。
是的,每个分片在给定时刻(每个应用程序)只能有一个处理器。
但是,您可以将传感器 ID 用作 kinesis put 记录请求的分区键。 (see here)
这将确保所有这些传感器事件都将进入同一个分片和处理器。
如果你这样做,你将能够扩展你的进程和碎片,并且仍然在单个处理器中处理每个传感器事件
我们目前有一个接收大量传感器数据的应用程序。每个传感器都有自己唯一的传感器 ID(例如“5834f7718273f92cc326f620”)并以不同的时间间隔发出其状态。传入消息的处理顺序并不重要,例如,一个传感器的较新消息可以在另一个传感器的较旧消息之前处理。但重要的是,给定传感器的每条消息都必须按顺序处理;按照他们到达溪流的顺序。
我查看了 Kinesis Client Library,了解到 KCL 将消息推送到每个分片的单个处理器。这是否意味着如果一个流只有一个分片,它将只有一个处理器,这不会造成瓶颈吗?或者 KCL 是否有多个处理器,并且不知何故,也许使用分区键可以确保永远不会同时处理具有相同分区键的消息?
注意:我们查看了 sqs fifo,但将其排除在外,因为每秒 300 条消息的限制很快就会成为问题。
是的,每个分片在给定时刻(每个应用程序)只能有一个处理器。
但是,您可以将传感器 ID 用作 kinesis put 记录请求的分区键。 (see here)
这将确保所有这些传感器事件都将进入同一个分片和处理器。 如果你这样做,你将能够扩展你的进程和碎片,并且仍然在单个处理器中处理每个传感器事件