我在guide告诉我,使用自定义值反序列化器创建org.apache.spark.streaming.kafka010.DirectKafkaInputDStream
:
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> config.kafka,
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[MyValueDeserializer],
"group.id" -> "my-group",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
val topics = Array(config.topic)
val stream = KafkaUtils.createDirectStream(
ssc,
PreferConsistent,
Subscribe[String, MyValue](topics, kafkaParams)
)
在我的自定义反序列化器中,我从org.apache.kafka.common.serialization.StringDeserializer
复制了异常处理:
} catch (UnsupportedEncodingException e) {
throw new SerializationException(...);
}
当它实际抛出序列化异常时,我在驱动程序日志中看到它的堆栈跟踪,下一行是
INFO StreamingContext: Invoking stop(stopGracefully=false) from shutdown hook
在客户端模式下使用spark-submit
在Spark 2.1.0上运行它。
所以我必须在反序列化器实现中吞下异常并返回null
。有没有办法以这样的方式配置ConsumerStrategy
,只是记录反序列化器异常,但不要停止Spark Streaming上下文?