网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
kafka-console-producer.sh --broker-list 192.168.56.137:9092 --topic kafka_spark
Spark Streaming 读取 Kafka 数据源由两种模式,我会逐一讲解。
三、KafkaUtils.createDstream
3.1 原理
构造函数为KafkaUtils.createDstream(ssc,[zk], [consumer group id], [per-topic,partitions] )
使用了receivers
来接收数据,利用的是Kafka高层次的消费者api,对于所有的receivers
接收到的数据将会保存在Spark executors
中,然后通过Spark Streaming
启动job
来处理这些数据,默认会丢失,可启用WAL日志,它同步将接受到数据保存到分布式文件系统上比如HDFS。 所以数据在出错的情况下可以恢复出来 。
</
- 创建一个receiver来对kafka进行定时拉取数据,ssc的rdd分区和kafka的topic分区不是一个概念,故如果增加特定主消费的线程数仅仅是增加一个receiver中消费topic的线程数,并不增加spark的并行处理数据数量。
- 对于不同的group和topic可以使用多个receivers创建不同的DStream。
- 如果启用了WAL(spark.streaming.receiver.writeAheadLog.enable=true)
,同时需要设置存储级别(默认StorageLevel.MEMORY_AND_DISK_SER_2),即KafkaUtils.createStream(….,StorageLevel.MEMORY_AND_DISK_SER)。