I am trying to register below class for Kryo Serialization in spark code but I am receiving an error.
Code:
class KafkaSink(createProducer: () => KafkaProducer[String, String]) extends Serializable {
lazy val producer = createProducer()
def send(topic: String, key: String, value: String): Unit = producer.send(new ProducerRecord(topic, key, value))
}
object KafkaSink {
def apply(config: Properties): KafkaSink = {
val f = () => {
val producer = new KafkaProducer[String, String](config)
//close producer if VM exits
sys.addShutdownHook {
producer.close()
}
producer
}
new KafkaSink(f)
}
}
Error:
Caused by: java.lang.IllegalArgumentException: Class is not registered: com.test.KafkaSink$$anonfun$1 Note: To register this class use: kryo.register(com.test.KafkaSink$$anonfun$1.class); at com.esotericsoftware.kryo.Kryo.getRegistration(Kryo.java:488) at com.esotericsoftware.kryo.util.DefaultClassResolver.writeClass(DefaultClassResolver.java:97) at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:517) at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:76) ... 14 more
I have tried registering the class using below 2 approaches which didn't work and giving me same error
kryo.register(classOf[KafkaSink])
kryo.register(KafkaSink.getClass)
How can I register this class?