能否在不丢失检查点的情况下从 Microsoft.Azure.EventHubs 库迁移到 Azure.Messaging.EventHubs?

Tom*_*mer 3 azure azure-sdk-.net azure-eventhub

Azure 事件中心发布了一个现代客户端库 ( Azure.Messaging.EventHubs),用于读取和写入事件中心。新库应该取代旧库(Microsoft.Azure.EventHubs),所以我想知道当前使用旧库的现有应用程序的升级路径应该是什么。

更具体地说,切换到新库是否意味着应用程序必须丢失旧版本的检查点?虽然迁移指南清楚地解释了升级的好处以及代码示例,但我找不到任何关于数据丢失的提及。

Tom*_*mer 5

事实证明,新 SDK 不使用与旧版本相同格式的检查点文件,并且转换到新库意味着旧版本的检查点将不会得到尊重。新版本将从事件中心的开头开始读取(根据指定的保留时间)。

两个版本的库都使用 Azure blob 存储来处理检查点和租赁。然而,虽然旧库每个分区使用一个文件,但它包含 JSON 格式的检查点和所有者信息。例如,0分区 0 的名为 的文件具有以下内容:

{"Offset":"0","SequenceNumber":0,"PartitionId":"0","Owner":"host-x","Token":<guid>","Epoch":62}
Run Code Online (Sandbox Code Playgroud)

新库为每个分区使用两个文件,每个文件位于单独的文件夹中。这些文件夹名为ownershipcheckpoint,并且它们包含每个分区 ID 的文件。所有权文件夹中的文件没有内容,并且所有者 ID 在 blob 的元数据中声明。同样,检查点文件夹中的文件没有内容,进度数据存储在元数据中,位于两个不同的字段中:offsetsequencenumber

此外,新库具有更复杂的文件夹结构:/EventHubsNamespace/EventHubsName/ConsumerGroupName/,而不是旧库中旧的/ConsumerGroupName/结构。

人们可能可以编写一个脚本来将检查点文件迁移到新格式,因为似乎所有需要的信息都可用,但我还没有对此进行测试。