如何在Spark Streaming Application中从Kafka接收Java对象

时间:2016-11-25 09:03:13

标签: java apache-spark spark-streaming

我有很多Say Test类的对象,我想写给Kafka并使用spark streaming App处理它们。我想使用Kryo序列化。

我的应用程序是Java

JavaDStream<Test> testData = KafkaUtils
                .createDirectStream(context , keyClass,valueClass ,keyDecoderClass ,valueDecoderClass , props,topics);

我的问题是我应该为keyClass,valueClass,keyDecoderClass,valueDecoderClass做什么?

1 个答案:

答案 0 :(得分:1)

假设您的主题是&#34; String&#34;和价值是&#34;测试&#34;然后,首先需要通过实现kafka.serializer.Encoderkafka.serializer.Decoder来创建TestEncoder和TestDecoder类。现在,您可以在createDirectStream方法中使用

JavaPairInputDStream<String, Test> testData = KafkaUtils
            .createDirectStream(context, String.class,Test.class ,StringDecoder.class,TestDecoder.class,props,topics);

您可以在https://www.tomsdev.com/blog/2015/storm-kafka-complex-types/

上提及KafkaKryoEncoder

在您的Kafka制作人中,您需要注册自定义编码器类,如

Properties properties = new Properties();
properties.put("metadata.broker.list", brokerList);
properties.put("serializer.class", "com.my.TestEncoder");
Producer<String, Test> producer = new Producer<String, Test>(new ProducerConfig(properties));
Test test = new Test();
KeyedMessage<String, Test> data = new KeyedMessage<String, Test>("myTopic", test);
producer.send(data);