我是kafka和spark的新手,想知道在spark工作失败后如何从kafka中恢复胶印。
条件:
说kafka流为5gb / s,从一开始就很难消耗
流数据已被消耗,因此如何告诉spark重新使用消息/顺利地重做失败的任务
我不确定要搜索哪个区域,也许有人可以将我指向正确的方向
答案 0 :(得分:1)
与kafka进行交易时,我们必须有2个不同的主题。一个成功,一个失败。
比方说,我有2个主题,主题成功和主题失败。 当Kafka成功处理数据流时,我们可以将其标记并存储在Topic-Success主题中,而当Kafka无法处理数据流时,我们将其存储在Topic-Failed主题中。
因此,当您要重新使用失败的数据流时,我们可以处理主题失败的主题中失败的数据流。在这里,您可以消除从一开始就重复使用所有数据的情况。
希望这对您有所帮助。
答案 1 :(得分:0)
在kafka 0.10.x中,有一个Consumer Group的概念,用于跟踪消息的偏移量。
如果已启用enable.auto.commit = true和auto.offset.reset = latest,则从一开始就不会消耗它。现在采用这种方法,您可能还需要跟踪偏移量,因为消耗后该过程可能会失败。我建议您使用Spark Docs中建议的这种方法
stream.foreachRDD { rdd =>
val offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
// some time later, after outputs have completed
stream.asInstanceOf[CanCommitOffsets].commitAsync(offsetRanges)
}
当端到端管道被执行时,CanCommitOffsets会自动提交这些消息