我正在使用
对Scala(ref)中的Kafka工作进行Spark Streamingpublic static <K,V,U extends kafka.serializer.Decoder<?>,T extends kafka.serializer.Decoder<?>> ReceiverInputDStream<scala.Tuple2<K,V>> createStream(StreamingContext ssc, scala.collection.immutable.Map<String,String> kafkaParams, scala.collection.immutable.Map<String,Object> topics, StorageLevel storageLevel, scala.reflect.ClassTag<K> evidence$1, scala.reflect.ClassTag<V> evidence$2, scala.reflect.ClassTag<U> evidence$3, scala.reflect.ClassTag<T> evidence$4)
我希望在同一个DStream
和每个批处理间隔的基础RDD
中接收不同类型的消息(需要不同的解码器)。我将听取多个主题,每个主题将对应一种消息类型,因此需要自己的Decoder
。目前似乎没有提供每个主题kafka.serializer.Decoder<?>
(是否有一个?)。人们似乎很可能会在每个主题上发送不同类型的消息(protobuf
序列化字节?)。还有其他人遇到过这个问题吗?
感谢。
下进行。
似乎topic
中某处valueDecoder
到@keyframe glow {
0%{}
100%{}
}
img {
animation: glow 10s infinite;
}
的映射可能有所帮助。
答案 0 :(得分:0)
我认为,你需要两个DStream,每个主题一个。然后,您将能够执行join或union以获得包含所有元素的单个dstream。
答案 1 :(得分:0)
使用createDirectStream api,它允许您通过HasOffsetRanges以每个分区为基础访问该主题。对于kafka解码器,使用DefaultDecoder为每条消息获取一个字节数组。
然后在mapPartitions中进行实际解码,在其中匹配主题名称以找出如何解释字节数组。
http://spark.apache.org/docs/latest/streaming-kafka-integration.html