如何使用scala在kafka使用者中实现反序列化?

时间:2014-10-08 13:47:56

标签: scala deserialization apache-spark apache-kafka

我的kafka消费者代码中有以下行。

val lines = KafkaUtils.createStream(ssc, zkQuorum, group, topicpMap).map(_._2) 

如何对此流进行反序列化" line"成原始对象?通过将类扩展为serialisable,可以在kafka生成器中实现Serialisability。我正在使用scala在spark中实现它。

1 个答案:

答案 0 :(得分:1)

您需要实现自定义Decoder,并将期望的类型信息与解码器一起提供给createStream函数。

KafkaUtils.createStream[KeyType, ValueType, KeyDecoder, ValueDecoder] (...)

例如,如果您使用String作为键,CustomContainer作为值,则您的流创建将如下所示:

val stream = KafkaUtils.createStream[String, CustomContainer, StringDecoder, CustomContainerDecoder](...)  

鉴于您正在将消息作为new KeyedMessage[String,String]附加到kafka,正确的解码器就是这样的字符串解码器:

KafkaUtils.createStream[String, String, StringDecoder, StringDecoder](topic,...)

将为您提供DStream[String,String]作为处理的基础。

如果您想发送/接收特定的对象类型,则需要为其实施Kafka EncoderDecoder。 幸运的是,PcapPacket已经实现了您执行此操作所需的方法:

其余部分是用于实现Kafka所需的编码器/解码器接口的样板代码。