首页 > 解决方案 > 如何处理 Azure 事件中心中的数据处理失败?

问题描述

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

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

有同样的想法吗?

标签: azureazure-eventhubdata-streamazure-eventhub-capture

解决方案


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

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

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

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

另一种方法是仅记录事件的分区和偏移量,然后使用EventHubConsumerClientorPartitionReceiver稍后将其读回,但这将是一种低效的模式,并且需要大量临时对象和网络开销。


推荐阅读