Spark Streaming 2.2.1 处理Kafka数据源的实战准备
Kafka是一种高吞吐量的分布式发布订阅消息系统,Spark Streaming读取Kafka数据支持二种方式:Receiver方式和No Receivers方式。
(1)Receiver方式:Spark Streaming kafkautil使用createStream方法。
(2)No Receivers方式:Spark Streaming kafkautil使用createDirectStream方法。
目前No Receivers方式在企业中使用的越来越多,No Receivers方式具有更强的自由度控制、语义一致性。No Receivers方式更符合数据读取和数据操作,在生产环境中建议采用NoReceivers direct的方式。
(一) Kafka基础知识的准备。
发布消息通常有两种模式:队列模式(Queuing)和发布-订阅模式(Publish-Subscribe)。队列模式中,Consumers可以同时从服务端读取消息,每个消息只被其中一个Consumer读到;发布-订阅模式中消息被广播到所有的Consumer中。
Kafka的Topic的分区数,是Consumer可以读取的并行数的最高限制值,这里对应Spark Streaming并行读取(Read Parallelisms)的最大值。
当Consumer使用相同的GroupId去读取同一个Topic数据时,该Topic会将分区数据分发到各个Consumer,即队列模式的消息发布模式;如果Consumer使用不同的GroupID去读取同一个Topic数据时,该Topic的分区数据会广播到各个Consumer上,即使用广播的消息发