我的火花流媒体工作正在消耗来自Kafka的数据
var loginVC: UIViewController? = self.storyboard?.instantiateViewControllerWithIdentifier("UILogin") as? UIViewController
self.presentViewController(loginVC!, animated: true, completion: nil)
每当我重新开始工作时,它就开始从最后一个偏移存储开始消费(我假设这是因为它需要花费大量时间来发送已处理的数据,如果我更改了消费者组,它会立即使用新消息)
我是kafka 8.1.1其中auto.offset.reset默认为最大值,这意味着每当我重新启动时,kafka都会从我离开的地方发送数据。
我的用例要求我忽略此数据并仅处理到达的数据。我怎样才能实现这一目标? 任何建议
答案 0 :(得分:4)
有两种方法可以实现这一目标:
每次重新启动时都会创建一个唯一的使用者组,它将使用最新的偏移量。
使用直接方法代替基于接收器;在这里,您可以更好地控制使用方式,但必须手动更新zookeeper以存储偏移量。在下面的示例中,它始终以最新的偏移量开始。
import org.apache.spark.streaming.kafka._
val topicsSet = topics.split(",").toSet
val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers)
val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet)
有关直接进场的文件:https://spark.apache.org/docs/latest/streaming-kafka-integration.html