KafkaUtils.createRDD将offsetRanges作为参数。我不知道我要阅读的主题的偏移量。我想阅读该主题中的前30条消息。
我看到有一个KafkaCluster.html#getLatestLeaderOffsets,但是它被注释为Develop API。
有没有公开的方法来确定某个主题的最早和最新补偿?
答案 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)
}
希望这有帮助。