我有很多Say Test类的对象,我想写给Kafka并使用spark streaming App处理它们。我想使用Kryo序列化。
我的应用程序是Java
JavaDStream<Test> testData = KafkaUtils
.createDirectStream(context , keyClass,valueClass ,keyDecoderClass ,valueDecoderClass , props,topics);
我的问题是我应该为keyClass,valueClass,keyDecoderClass,valueDecoderClass做什么?
答案 0 :(得分:1)
假设您的主题是&#34; String&#34;和价值是&#34;测试&#34;然后,首先需要通过实现kafka.serializer.Encoder
和kafka.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);