我正在使用 Azure Functions 1.x 从 Azure 事件中心使用 EventData
事件。但是,我注意到 PartitionKey
始终为空。然而,Offset
和 SequenceNumber
都已填充。
我知道发送者可以选择设置 PartitionKey
。事实上,它是recommended出于性能原因不要设置它。但是,我假设在到达消费者的过程中的某个地方,将使用处理 EventData
的分区来设置 PartitionKey
。
如果情况并非如此,发送 Offset
和 SequenceNumber
有何意义?每个分区都维护自己的 Offset
和 SequenceNumber
。如果我想重播一个事件,在不知道 PartitionKey
的情况下该怎么做?
编辑:
我刚刚发现,如果我绑定(bind)到 PartitionContext
,我可以查看 EventData
来自的 PartitionId
。为什么不使用它来填充 EventData
上的 PartitionKey
?这是 Azure Functions 的错误吗?
最佳答案
PartitionKey
是 different来自 PartitionId
:
PartitionId is different than PartitionKey. Partition keys are used to ensure same partition keys to land on the same partition ids. You can think PartitionKey to partitionId relation as "f(partitionKey) = partitionId" where f is a hashing function.
如果发送者未设置PartitionKey
,则该PartitionKey
将为空,如Ling Toh所述。 .
您可以使用 PartitionContext
绑定(bind)访问 Azure Functions 中的 PartitionId
。
关于azure - 为什么 Azure 事件中心 EventData 的 PartitionKey 字段为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454349/