【发布时间】:2019-08-18 09:29:14
【问题描述】:
我正在处理 kafka 消息并使用带有手动偏移提交的 spark 流插入 kudu 表,这是我的代码。
val topicsSet = topics.split(",").toSet
val kafkaParams = Map[String, Object](
ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG -> brokers,
ConsumerConfig.GROUP_ID_CONFIG -> groupId,
ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer],
ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG -> classOf[StringDeserializer],
ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG -> (false: java.lang.Boolean),
ConsumerConfig.AUTO_OFFSET_RESET_CONFIG -> "earliest" //"latest" //"earliest"
)
val stream = KafkaUtils.createDirectStream[String, String](
ssc,
PreferConsistent,
Subscribe[String, String](topicsSet, kafkaParams)
)
stream.foreachRDD { rdd =>
var offsetRanges = rdd.asInstanceOf[HasOffsetRanges].offsetRanges
//offsetRanges.foreach(println)
var msgOffsetsRdd = rdd.map(msg =>{
val msgOffset = OffsetRange(msg.topic(), msg.partition(), msg.offset(), msg.offset()+1)
println(msg)
msgOffset
}
)
val msgOffsets = msgOffsetsRdd.collect() //here idea was to get only processed messages offsets for commit
stream.asInstanceOf[CanCommitOffsets].commitAsync(msgOffsets)
}
让我们列出这个示例在将数据插入 kudu 时出现错误,我需要再次处理这些消息,如果我停止工作并重新启动它,我能够得到未提交的消息,我们不能得到所有未提交的消息吗流媒体?
【问题讨论】:
标签: apache-kafka spark-streaming kafka-consumer-api