我想使用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中还没有消息。
答案 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
}