kafka只消费新消息

时间:2015-05-06 20:27:29

标签: apache-spark apache-kafka spark-streaming kafka-consumer-api

我的火花流媒体工作正在消耗来自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都会从我离开的地方发送数据。

我的用例要求我忽略此数据并仅处理到达的数据。我怎样才能实现这一目标? 任何建议

1 个答案:

答案 0 :(得分:4)

有两种方法可以实现这一目标:

  1. 每次重新启动时都会创建一个唯一的使用者组,它将使用最新的偏移量。

  2. 使用直接方法代替基于接收器;在这里,您可以更好地控制使用方式,但必须手动更新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)
    
  3. 有关直接进场的文件:https://spark.apache.org/docs/latest/streaming-kafka-integration.html