【问题标题】:EPOCH Error while communicating with Azure Event Hub与 Azure 事件中心通信时出现 EPOCH 错误
【发布时间】:2020-11-12 16:26:34
【问题描述】:

我正在使用 Azure 事件中心在我的应用程序中侦听实时数据。大多数情况下,它工作正常,但有时会引发以下错误 -

创建具有更高纪元“3109”的新接收器,因此当前具有纪元“3108”的接收器将断开连接。如果您正在重新创建接收器,请确保使用更高的 epoch。 TrackingId:eb2a6f970000494500f379f85b484a9f_C-1553490498_B22, SystemTracker:xxxxxxxxxx:eventhub:xxxxxxx~2730|$default, 时间戳:7/13/2018 6:48:54 AM。

并且应用程序停止处理数据。我在网上浏览了几篇文章,但找不到任何解决方案。在 MSDN 上,我阅读了

EPH 依赖于“在任何给定时间,消费者组中只能有 1 个活动的 epoch 接收器”这一事实

但我不确定如何确保只有 1 个活动时期。此外,三个不同的环境(即开发、测试、生产)使用相同的事件中心。

任何建议都非常感谢..

【问题讨论】:

    标签: azure signalr azure-eventhub


    【解决方案1】:

    听起来您正在运行应用程序的两个实例、两个并发类或使用相同事件中心使用者组的两个应用程序。事件中心消费者组实际上是指向事件流上某个时间点的指针。如果您尝试将一个消费者组与两个代码实例一起使用,那么您会遇到与您所看到的一样的冲突。

    任一:

    1. 确保一次只有一个实例读取消费者组。
    2. 当您需要两个单独的程序或一组功能来同时处理事件中心时,请使用两个使用者组。
    3. 如果您希望并行化以提高性能,请查看事件中心分区以及如何利用独立处理每个分区的优势。

    还有一种替代方案,即作为事件中心内部负载平衡的一部分,将事件中心分区切换到另一台主机。在这种情况下,您可能会看到您收到的错误。在这种情况下,只需登录并继续。

    Here is some good documentation to help you on your way.

    【讨论】:

    • 有没有办法设置一些策略,以便一个未能削减它的副本重新开始并继续进入流?当然,不用重启。
    • 是的,使用检查点/偏移量,但您需要在代码中对其进行管理。不过我会寻找更优雅的设计。
    • 您认为以下解决方案更优雅吗?两个 EH 消费者副本侦听具有 4 个分区的同一消费者组。第一个副本占用前两个分区,第二个副本占用其余部分。我认为,最好在一个分区上只保留一个一个消费者副本,是吗?
    • 每个消费者组只能有一个阅读器。尝试在分区级别进行管理只会让人头疼。您是否考虑过将服务总线作为替代方案?
    • 我正在将流读入数据帧,然后过滤该 DF 以获取无效事件。现在我想遍历无效事件以记录它们 - 所以我正在对 invalidEvents DF 进行 foreach。这样做时我遇到了相同的时代错误。有什么解决方法吗?所以基本上它是读一次 - 写一次 + 再写一个子集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多