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并行度参数没有关系。

 

posted @ 2020-05-28 15:35  hulifang  阅读(431)  评论(0编辑  收藏  举报