如何在 Azure 事件中心使用批处理消息设置分区键?

How do I set partition key with batched messages in Azure Event Hub?

我从文件中读取行(我们称之为 customers)并将它们发布到事件中心。每行包含一个 customer_id 和一些数据。同一客户可能会在文件中出现多次。所以我想使用 customer_id 作为分区键来保证为同一个客户保留顺序,同时出于性能原因仍然分批发送消息。看起来很简单...

因此,您可以使用

对消息或批处理设置分区
   var opts = new SendEventOptions() {
       PartitionKey = customer.CustomerId
   };
   client.SendAsync(messages, opts);

但这会在批处理 本身上设置分区键,这将使批处理中的所有消息都具有相同的键

甚至可以在每条消息上设置分区键并仍然以理智的方式使用批处理吗?最好我想在每条消息上设置密钥,然后将它们添加到一个批处理中并发送。

我正在使用 Azure.Messaging.EventHubs 命名空间和 C#。

不幸的是,您想要做的事情是不可能的。事件中心服务要求为批次中的所有事件分配相同的分区键。

使用分区键的最佳做法是为您正在使用的每个分区键构建一个批处理,并在您处理时添加到它们中,在已满或超过某个刷新阈值时发送。

或者,您可以将每个客户标识符分配给特定分区,然后使用上述方法为每个分区构建一个批处理。这会更有效率,因为您需要管理的批次数量较少,并且可能会更快地填充每个批次。