首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >azure-sdk-for-java eventhubs分区已经丢失。

azure-sdk-for-java eventhubs分区已经丢失。
EN

Stack Overflow用户
提问于 2021-11-10 06:17:39
回答 1查看 457关注 0票数 0

我们最近通过遵循azure-博士部署了azure事件-hub java接收器/侦听器客户端。

我真的相信数组从0开始,但这与这个问题无关。因此,无论如何,我注意到以下从processError引发的错误&也就是processPartitionClose

代码语言:javascript
复制
Error occurred in partition14 - connectionId[MF_5fba9c_1636350888640] sessionName[eventhub-name/ConsumerGroups/consumer-group-name/Partitions/14] entityPath[eventhub-name/ConsumerGroups/consumer-group-name/Partitions/14] linkName[14_500701_1636350888641] Cannot create receive link from a closed session., errorContext[NAMESPACE: namespace.servicebus.windows.net. ERROR CONTEXT: N/A, PATH: eventhub-name/ConsumerGroups/consumer-group-name/Partitions/14]
ERROR  | Partition has been lost 14 reason LOST_PARTITION_OWNERSHIP

问题:

  1. azure-sdk-for-java sdk甚至会自动在这样的分区上重新连接吗?
  2. 如果不是,那么在手动重新启动之前,最佳实践是什么?
    • 需要手动更新检查点吗?
    • 我需要在所有权问题上做些什么吗?

这是我们用示例代码安装的sdk

代码语言:javascript
复制
EventProcessorClientBuilder eventProcessorClientBuilder = new EventProcessorClientBuilder()
                .checkpointStore(new BlobCheckpointStore(blobContainerAsyncClient))
                .connectionString(getEventHubConnectionString(), getEventHubName())
                .consumerGroup(getConsumerGroup())
                .initialPartitionEventPosition(initialPartitionEventPosition)
                .processEvent(PARTITION_PROCESSOR)
                .processError(ERROR_HANDLER)
                .processPartitionClose(CLOSE_HANDLER);

 EventProcessorClient eventProcessorClient = eventProcessorClientBuilder.buildEventProcessorClient();
 // Starts the event processor
 eventProcessorClient.start();

 private final Consumer < ErrorContext > ERROR_HANDLER = errorContext->{
     log.error("Error occurred in partition" + errorContext.getPartitionContext().getPartitionId()
          + " - " + errorContext.getThrowable().getMessage());
 };

 private final Consumer < CloseContext > CLOSE_HANDLER = closeContext->{
     log.error("Partition has been lost " + closeContext.getPartitionContext().getPartitionId()
          + " reason " + closeContext.getCloseReason());

     EventContext lastContext = lastEvent.get();
     if (lastContext != null && (lastContext.getEventData().getSequenceNumber() % 10) != 0) {
         lastContext.updateCheckpoint();
     }
 };
代码语言:javascript
复制
jdk : 1.8

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-eventhubs-checkpointstore-blob</artifactId>
    <version>1.10.0</version>
</dependency>

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-messaging-eventhubs</artifactId>
    <version>5.10.1</version>
</dependency>

我确实遇到过集邮中心-15164期,但在任何地方都找不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 09:03:15

azure-sdk-for-java sdk甚至会自动在这样的分区上重新连接吗?

是的,EventProcessorClientazure-messaging-eventhubs库中将在这样的分区上重新连接。你不需要手动改变任何东西。

如果有多个运行EventProcessorClient的实例,并且它们都处理来自同一个事件集线器的事件,并且使用相同的使用者组,那么您将在一个处理器上看到这个LOST_PARTITION_OWNERSHIP错误,因为另一个处理器可能已经声明了一个分区的所有权。检查点从检查点存储区读取(上面代码示例中的Storage),然后从下一个序列号开始处理。

请参考分区所有权和检查点了解更多详细信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69908654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档