如果我不知道直到偏移,我可以从kafka主题创建RDD吗?

时间:2016-05-01 16:15:57

标签: apache-spark apache-kafka

KafkaUtils.createRDD将offsetRanges作为参数。我不知道我要阅读的主题的偏移量。我想阅读该主题中的前30条消息。

我看到有一个KafkaCluster.html#getLatestLeaderOffsets,但是它被注释为Develop API。

有没有公开的方法来确定某个主题的最早和最新补偿?

1 个答案:

答案 0 :(得分:3)

事情并非如此简单,因为只有个别经纪人知道给定主题/分区的最新偏移信息是什么。

你可以OffsetRequest。以下内容将返回主题/分区的最早和最新偏移量(它的Scala,但如果您不使用Scala,您应该能够理解这一点。)

请注意,您必须使用连接到作为请求分区的领导者的代理的SimpleConsumer。通常我所做的是,我为每个经纪人创建一个SimpleConsumer。然后我做一个元数据请求并获得分区到领导者映射,然后foreach分区我这样做:

def getOffsets(consumer: SimpleConsumer, topic: String, partition: Int) : (Long,Long) = {
  val time = kafka.api.OffsetRequest.LatestTime
  val reqInfo = Map[TopicAndPartition,PartitionOffsetRequestInfo]((new TopicAndPartition(topic, partition)) -> (new PartitionOffsetRequestInfo(time, 1000)))
  val req = new kafka.javaapi.OffsetRequest(reqInfo, kafka.api.OffsetRequest.CurrentVersion, "offReq")
  val resp = consumer.getOffsetsBefore(req)
  val offsets = resp.offsets(topic, partition)
  if (offsets.size > 0) (offsets(offsets.size - 1), offsets(0))
  else (0, -1)
}

希望这有帮助。