【问题标题】:How to handle data processing failures in Azure Event Hub?如何处理 Azure 事件中心中的数据处理失败?
【发布时间】:2021-08-17 22:10:42
【问题描述】:

我们计划将事件中心用于物联网设备数据流和处理。我们已经为架构做好了准备,但我们看到的唯一挑战是故障重新处理。下面是例子,

  1. IoT 设备将数据发送(通过 IoT 中心)到事件中心。事件中心读取器正在将数据推送到数据库。
  2. 如果我们的处理器因某种原因出现故障(不是针对所有遥测数据,而是针对故障数据),我们希望单独捕获这些事件。
  3. 事件中心具有设置检查点的功能,但这会在事件中心事件中标记,而不是针对特定事件。
  4. 我们只想记录在处理过程中失败的事件,并希望为此类事件实现重新处理逻辑。

有同样的想法吗?

【问题讨论】:

  • 将它们排入队列并重新处理如何?
  • 这是替代方案,但最初我们正在尝试仅使用事件中心的一些机制。
  • 好吧,您可以将它们发布到同一个事件中心,但它们最终会出现在流的后面。根据事件的数量,可能需要一段时间才能重新处理它们。没有什么 ootb afaik。

标签: azure azure-eventhub data-stream azure-eventhub-capture


【解决方案1】:

事件中心旨在作为只进流读取,一旦应用程序读取一个事件,它就会以适合应用程序上下文的方式处理该事件。

由于事件中心优先考虑高吞吐量,因此该服务有意不提供一组丰富的代理端功能,从而将更多责任委托给消费应用程序。不幸的是,这包括对死信或标记一组随机事件的支持。

正如 Peter 所提到的,服务总线可能更适合您的方案,并且将事件从事件中心复制到服务总线进行处理将为您提供内置的死信支持以及其他功能简化您的应用程序逻辑。 This article 提供了 Azure 消息传递产品的一个很好的比较,以供您考虑。

如果您打算使用事件中心,建议您使用 Peter 将中毒/故障事件移动到另一个存储平台(消息队列、数据库等)的建议。这将使您可以将它们作为一组重新访问,并在处理完它们后将其删除。

另一种方法是只记录事件的分区和偏移量,然后使用EventHubConsumerClientPartitionReceiver 稍后再读回来,但这将是一种效率低下的模式,并且需要很多临时对象和网络开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2022-11-22
    • 2023-02-01
    • 2021-06-05
    相关资源
    最近更新 更多