Dapr 输入与 Azure 事件中心的绑定同步处理消息

Dapr input binding with Azure Event Hub processes messages synchronously

我们正在使用 dapr 和输入绑定来使用来自 Azure 事件中心的 IoT 事件。 事件中心有 32 个分区,发送方使用设备 ID 作为分区键。 收到事件的控制器将它们委托给 dapr Actors 进行处理。

现在我的期望是,每个分区中的消息被并行处理,从而导致对接收事件的控制器的并行请求允许最多处理 32 个并发事件批次。

但是测试表明事件是同步接收的。在前一个事件的全部处理完成后立即接收后续事件。

现在我知道 actor 是设计来一个接一个地处理消息的,但是我没有读过类似这样的输入绑定的内容,根据 the documentation

有什么我完全遗漏的吗?否则我无法想象这个系统如何扩展。

我们在 AKS 集群中使用 dapr 0.11 和 ASP.NET Core 3.1 运行。

我刚刚在 GitHub 上得到了答案:https://github.com/dapr/components-contrib/issues/759

所以基本上这证实了我基于当前版本的 dapr 事件中心绑定的观察。

但是,您可以手动配置每个 dapr 组件的分区 ID。因此,要同时读取 32 个分区,您目前必须使用 32 个 dapr 组件,每个组件从一个单独的分区读取。

引用上面GitHub问题:

[...] you can specify a Dapr component per partition ID: https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/eventhubs/

If you set the partitionID field on the component metadata, the consumer will pull all messages for that partition ID.
Otherwise, it'll pull from all partitions.