我有Spark Streaming作业,该作业从Azure Eventhub捕获近乎实时的数据并以24/7的速度运行。 更有趣的是,我的工作每天至少失败2次,并出现以下错误。如果我搜索到此错误,Microsoft文档会给我“如果两个或多个PartitionReceiver实例连接到具有不同历元值的同一分区,则会抛出此异常”。。我不担心数据丢失,因为当我重新启动作业时,Spark Checkpointing会自动处理数据,但是我的问题是为什么Spark Streaming作业每天会失败2-3次,并出现相同的错误。
任何人都面临相同的问题,是否有任何解决方案/变通办法。任何帮助将非常感激。
答案 0 :(得分:0)
如果两个或多个 Partitions Receiver 实例连接到具有不同历元值的同一分区,则会引发此异常。
什么是分区接收器?
这是从EventHub分区接收的逻辑表示。
PartitionReceiver绑定到ConsumerGroup + Partition组合。如果您要创建基于纪元的PartitionReceiver(即PartitionReceiver.Epoch!= 0),则每个ConsumerGroup + Partition组合的活动接收器不能超过一个。每个ConsumerGroup + Partition组合中可以有多个接收器,而非时间段接收器。
听起来您正在运行两个应用程序实例,两个并发类或两个使用相同事件中心使用者组的应用程序。事件中心使用者组实际上是指向事件流上某个时间点的指针。如果尝试使用指向两个代码实例的一个消费者组,那么您将遇到与看到的冲突。
任何一个:
还有另一种方案,其中将事件中心分区作为事件中心内部负载平衡的一部分切换到另一台主机。在这种情况下,您可能会看到收到的错误。在这种情况下,只需登录并继续。
有关更多详细信息,请参阅“ Features and terminology in Azure Event Hubs”和“ Event Hubs Receiver Epoch”。
希望这会有所帮助。