我们前面SparkStreaming获取数据的来源是TCP,但是平常是不会这么用的,我们通常用的是Kafka。
SparkStreamingContext是不直接提供对Kafka的访问的。
这个时候就有KafkaUtils
这里有两个方法
1.createDirectStream,是一种直连方式,他很重要,因为他用的是Kafka的底层API,他在消费的时候,会直接连到Kafka的分区上。
2.createStream,是有接收者的方式,而刚才我们讲的createDirectStream是没有接收者的方式。这是一种简单的方式,这种简单的方式在很早之前就出现了,但是他有一个问题,就是容易丢失数据,并且它的效率也比较低。
我们这里先使用这种简单的方式,这种简单方式其实他会自动帮我们维护偏移量,如果我们想要使用又高效,又不丢失数据的方式,我们就要手动维护偏移量。
使用这种傻瓜式的方式,我们首先要传进去StreamingContext,
第二个参数是zkQuorm,这个参数是zookeeper的连接地址
第三个参数是组id,我们知道消费者有一个消费者组,而我们SparkStreaming程序提交到集群中是分布式运行的。他相当于有很多的消费者。很多的消费者要消费同一份数据。他们不能重复消费,有了消费者组之后,就不会产生交叉消费的情况。
第四个参数是topic,他是一个Map&