spark 对接kafka问题
spark streaming job失败
https://blog.csdn.net/TNT_wang/article/details/105189138
https://www.cnblogs.com/oush/p/11489126.html
正确做法一:为每个RDD分区创建一个连接对象
dstream.foreachRDD { rdd => //foreachRDD是在driver端的算子,如果在driver端创建连接,需要将连接对象序列化后传递到worker端,而连接对象不支持序列化,会报错。 rdd.foreachPartition { partitionOfRecords => // foreachPartition worker端算子 val connection = createNewConnection() partitionOfRecords.foreach(record => connection.send(record)) //foreach worker端算子 connection.close() } }
正确做法二:为每个RDD分区使用一个连接池中的连接对象
dstream.foreachRDD { rdd => rdd.foreachPartition { partitionOfRecords => // 从数据库连接池中获取连接 val connection = ConnectionPool.getConnection() partitionOfRecords.foreach(record => connection.send(record)) ConnectionPool.returnConnection(connection) // 用完以后将连接返 回给连接池,进行复用 } }
https://www.jianshu.com/p/63f52743ae77
sparkstreaming输出重复问题
https://www.cnblogs.com/sparkbigdata/p/5458336.html
sparkstreaming反压机制(https://blog.51cto.com/14309075/2414995)
Spark Streaming中的反压机制是Spark 1.5.0推出的新特性,可以根据处理效率动态调整摄入速率。当数据的处理速度小于数据摄入的速度,持续时间过长或源头数据暴增,容易造成数据在内存中堆积,最终导致Executor OOM或任务奔溃。在Spark 1.5.0以上,就可通过背压机制来实现。开启反压机制,即设置spark.streaming.backpressure.enabled为true,Spark Streaming会自动根据处理能力来调整输入速率,从而在流量高峰时仍能保证最大的吞吐和性能。
sparkstreaming 读取kafka,receiver模式并行度是线程数的个数。跟设置的spark.default.parallelism并行度参数没有关系。