sparkstreaming连接kafka
SparkStreaming从kafka中获取数据时采取KafkaUtils.createDirectStream这个方法来获取StreamingContext对象规定时间内对应kafka分区产生的消息
源码传参解析:
首先是规定泛型:
分别为K,V,KD,VD,R
按照源码中注释的部分解析
1.k与v分别是存储于kafka的消息的key与value的类型
2.KD,VD的类型可是看出是Decoder[T]类的子类,也就是kafkakey与value的类型序列化类型,kafka已经提供了这样的序列化类型,例如string的序列化类型StringDecoder(注意这个stringDecode类型的编码集是utf-8)
3.R则是返回的InputDStream对象中的规定的类型
接下来看传参:
分别为StreamingContext对象,Map[String, String]与Map[TopicAndPartition, Long]的map,messageHandler: MessageAndMetadata[K, V] => R
1.StreamingContext对象不必多说 就是我们确定spark伪实时时间的对象
2.Map[String, String]集合kafkaParams,通过注释与命名可以看出是一个用于配置的map集合,用于规定kafa配置中的metadata.broker.list(kafka broker块的地址)等。
3.fromOffsets: Map[TopicAndPartition, Long],fromOffsets规定的在一个map集合中规定分区与偏移量,Long类型为偏移量,而对于opicAndPartition对象,我们看源码
我们只需要传输一个 kakfa中的主题名,及其对应的分区(int)即可
示例:
4.messageHandler: MessageAndMetadata[K, V] => R,这个方法主要将
MessageAndMetadata对象中的数据返回
这个对象可以获取的参数是topic和partition通过 key和massage方法反序列化kafka传递的内容
这个对象可以获取到当前传输信息的key,massage,topic,partition 例如:
示例只传递了message(R泛型对应的类型),这就是kafka中一条消息的message,同时可以调用mmd中的key方法获取key值或者直接获取其他属性组成元组
最终通过传参调用方法返回流对象,可以把其当成rdd来处理