[英]Is there a way to specify multiple Decoders (or one per Topic) in a Kafka Consumer? Anyone else felt need for this?
我正在使用以下方法在Scala( ref )中的Kafka工作上進行Spark Streaming
public 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
序列化字節?)。 還有其他人遇到這個問題嗎?
謝謝。
C。
看來的映射topic
來valueDecoder
地方在這里可以幫助。
我認為,您需要兩個DStream,每個主題一個。 然后,您將能夠執行join或union以獲得具有所有元素的單個dstream。
使用createDirectStream api,該API使您可以通過HasOffsetRanges按分區對主題進行訪問。 對於kafka解碼器,請使用DefaultDecoder獲取每個消息的字節數組。
然后在mapPartitions中進行實際的解碼,在其中與主題名稱進行匹配,以弄清楚如何解釋字節數組。
http://spark.apache.org/docs/latest/streaming-kafka-integration.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.