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