文章目录
官方文档:
http://spark.apache.org/docs/2.2.0/streaming-kafka-integration.html
Spark Streaming整合Kafka的版本选择详解
在spark2.2之前建议选择spark-streaming-kafka-0-8版本;虽然spark-streaming-kafka-0-10是优化更好的;但是2.2之前的相关api还不稳定
在spark2.3之后建议选择spark-streaming-kafka-0-10版本;spark-streaming-kafka-0-8已经是官方弃用的。
以下是基于spark2.2的测试:
Receiver方式整合之概述
这种方法使用一个接收器来接收数据。接收器是使用Kafka高级消费者API(高级api就是offset偏移量是自动完成控制;手动控制offset的就是低级api)实现的。与所有接收方一样,通过接收方从Kafka接收到的数据存储在Spark执行器中,然后由Spark流启动的作业处理这些数据。
但是,在默认配置下,这种方法在失败时可能会丢失数据(参见接收方可靠性)。为了确保零数据丢失,您必须在Sparkstreaming中(在Spark 1.2中引入)另外启用WAL机制。这将同步地将所有接收到的Kafka数据保存到分布式文件系统(比如HDFS),以便在故障时可以恢复所有数据。有关写前日志的详细信息,请参阅流编程指南中的部署部分。
Receiver方式整合之Kafka测试
Receiver整合前置条件:
- 启动zk
- 启动kafka
- 创建topic
- 通过控制台测试本topic是否能够正常的生产和消费信息
Receiver方式整合之Spark Streaming应用开发
添加pom文件中的依赖
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-8_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{
Seconds, StreamingContext}
/**
* Spark Streaming对接Kafka的方式一
*/
object KafkaReceiverWordCount {
def main(args: Array[String]