如何获得kafka的最新偏移量

时间:2017-03-06 06:12:57

标签: scala apache-spark streaming apache-kafka

我想使用kafka + spark流来构建应用程序,应用程序将接收mutilpe主题的数据。我想使用方法

def createDirectStream[
K: ClassTag,
V: ClassTag,
KD <: Decoder[K]: ClassTag,
VD <: Decoder[V]: ClassTag,
R: ClassTag] (
  ssc: StreamingContext,
  kafkaParams: Map[String, String],
  fromOffsets: Map[TopicAndPartition, Long],
  messageHandler: MessageAndMetadata[K, V] => R
)

将发出主题+消息,但在开始时,我需要将fromOffsets参数传递给此func。现在的问题是我不知道主题的最新偏移,我应该怎么做以便我可以将偏移量传递给func。假设kafka中还没有消息。

1 个答案:

答案 0 :(得分:0)

如果Kafka中还没有消息,则每个分区的偏移量为0.如果您想在没有偏移的情况下开始,则可以使用不带fromOffsets: Map[TopicAndPartition, Long]参数的重载:

def createDirectStream[
  K: ClassTag,
  V: ClassTag,
  KD <: Decoder[K]: ClassTag,
  VD <: Decoder[V]: ClassTag](
    ssc: StreamingContext,
    kafkaParams: Map[String, String],
    topics: Set[String]
)

当您开始运行流式处理作业时,您可以通过将RDD强制转换为HasOffsetRanges来提取偏移量:

inputDStream.transform {
  rdd => 
    val offsets = rdd.asInstanceOf[HasOffsetRanges]
    // Save offsets
}