Kafka生产者无论如何都会返回Java Future(或者您可以使用回调),在我的Spark工作中,我想确保事物发送正确并且运行迅速。
使用:
rdd.foreach { msg =>
kafkaProducer.send(msg).get() //wait for the future to complete
}
一点也不好。
我正在考虑使用
rdd.repartition(20).foreachPartition { iterator =>
iterator.foreach { msg =>
kafkaProducer.send(msg).get()
}
}
我的问题是,foreachPartition是否可以并行运行?从我编写的一个简单测试中很难看出,因为foreachPartition的内容似乎是从同一线程运行的。但是我不知道这是否取决于我的测试设置...