我正在使用Spark Streaming,当它尝试流式传输主题时突然收到此消息。如何跳过此错误?
Caused by: java.lang.AssertionError: assertion failed: Got wrong record for GROUP TOPIC 109 even after seeking to offset 754809
at scala.Predef$.assert(Predef.scala:170)
at org.apache.spark.streaming.kafka010.CachedKafkaConsumer.get(CachedKafkaConsumer.scala:90)
at org.apache.spark.streaming.kafka010.KafkaRDD$KafkaRDDIterator.next(KafkaRDD.scala:228)
at org.apache.spark.streaming.kafka010.KafkaRDD$KafkaRDDIterator.next(KafkaRDD.scala:194)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:462)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:438)
at org.apache.spark.storage.memory.MemoryStore.putIteratorAsValues(MemoryStore.scala:222)
at org.apache.spark.storage.BlockManager$$anonfun$doPutIterator$1.apply(BlockManager.scala:988)
at org.apache.spark.storage.BlockManager$$anonfun$doPutIterator$1.apply(BlockManager.scala:979)
at org.apache.spark.storage.BlockManager.doPut(BlockManager.scala:919)
at org.apache.spark.storage.BlockManager.doPutIterator(BlockManager.scala:979)
at org.apache.spark.storage.BlockManager.getOrElseUpdate(BlockManager.scala:697)
at org.apache.spark.rdd.RDD.getOrCompute(RDD.scala:334)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:285)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:322)
答案 0 :(得分:0)
这不是实际答案,但不适合评论。另外,这不是解决方法。
Spark也保留偏移量,并在使用消息时检查完整性。 Spark Streaming API中保留的偏移状态与Kafka保留的偏移状态很少匹配。您可以检查偏移量的完整性:
kafka-simple-consumer-shell --broker-list BROKER:9092 --clientId GROUP_ID --offset 752000 --print-offsets --max-messages 1000 --topic TOPIC | grep offset
此处,偏移量为752000,但在失败之前,您会看到例外情况。
您可以遍历输出,并在Kafka中查看偏移量是否按顺序排列。
但是,在我们的案例中,Kafka中的偏移量很好。我们在卡夫卡(Kafka)发生了故障,因此不得不通过重建日志来恢复。因此,我们采取的方法只是将偏移量跳过到Spark Streaming与Kafka匹配的状态。
为此,我们使用kt工具作为
kt group -brokers BROKER:9092 -topic TOPIC -group GROUP_ID -partitions 113 -reset 753000
在这里,分区113是一个存在偏移量的问题(您可以从异常中找到它),而753000是一个可能的偏移量,您猜想以后应该没问题。有时,您需要重复该过程并重新开始工作,以使一切都好起来。
此过程是完全实验性的,因为该消息不会告诉您缺少哪个偏移量。因此,根据需要丢失多少数据的要求,可以选择日志中提到的偏移量之前或之后的数字。例如,如果在日志消息中打印了偏移752900,则可以通过将其设置为752800来跳过错误(错误的偏移在之前),或者必须将其设置为更早的值(例如752950)。在后者中,它会跳过50条消息。 / p>