我正在尝试使用以下API与Kafka进行Spark流式传输。我必须使用spark流式传输avro序列化数据,数据位于Kafka。
static <K,V,KD extends kafka.serializer.Decoder<K>,VD extends kafka.serializer.Decoder<V>,R>
JavaInputDStream<R> createDirectStream(JavaStreamingContext jssc, Class<K> keyClass, Class<V> valueClass, Class<KD> keyDecoderClass, Class<VD> valueDecoderClass, Class<R> recordClass, java.util.Map<String,String> kafkaParams, java.util.Map<kafka.common.TopicAndPartition,Long> fromOffsets, Function<kafka.message.MessageAndMetadata<K,V>,R> messageHandler)
:: Experimental :: Create an input stream that directly pulls messages from Kafka Brokers without using any receiver.
我可以知道我需要为API中的参数Class recordClass提供什么?我使用了下面的API,但它给出了编译错误。
我想要的只是从kafka接收字节流数据到火花流。
JavaInputDStream<byte[]> directKafkaStream = KafkaUtils.createDirectStream(jsc, String.class, byte[].class,
StringDecoder.class, DefaultDecoder.class, byte[].class, kafkaParams, topicMap,
(Function<MessageAndMetadata<String, String>, String>) MessageAndMetadata::message);
线程中的异常&#34; main&#34; java.lang.Error:未解析的编译 问题:方法createDirectStream(JavaStreamingContext, 班级,班级,班级,班级,班级, 地图,地图, KafkaUtils类型中的函数,R&gt;不是 适用于参数(JavaStreamingContext,Class, 班级,班级,班级, 班级,地图,地图, 功能,字符串&GT)
答案 0 :(得分:4)
试试这个。
JavaInputDStream<byte[]> directKafkaStream = KafkaUtils.createDirectStream(jssc, String.class, byte[].class,
StringDecoder.class, DefaultDecoder.class, byte[].class, kafkaParams, fromOffset,
(Function<MessageAndMetadata<String, byte[]>, byte[]>) MessageAndMetadata::message);
Here是Kafka,Avro和Spark的文章。