我必须编写Spark Streaming(createDirectStream API)代码。我将每秒接收大约9万条消息,尽管通过对kafka主题使用100个分区来提高性能。
请让我知道我应该使用多少个执行器?我可以使用50个执行程序,每个执行程序使用2个内核吗?
还要考虑批处理间隔是10秒,并且kafka主题的分区数是100,我会从每个kafka分区中收到100个RDD,即1个RDD吗?在10秒的批处理间隔内,每个分区中只有1个RDD。
谢谢
答案 0 :(得分:0)
实际上,没有好的答案,这取决于集群中有多少执行程序内存和内核。
硬限制是执行程序进程总数不能超过kafka分区,并且您不希望网络或其他IO饱和。
因此,首先查找是否要用一个执行程序来限制网络和/或内存/磁盘,然后运行两个,并查看一台计算机上的吞吐量是否翻了一番并且网络速率降低了一半。然后根据需要扩展核心和实例。
Dropbox recently wrote a blog on their performance testing
关于RDD,假设您有1:1的执行者实例到分区的映射,那么每个执行者将仅在一个分区上看到每个间隔10秒的数据,每个执行者都有自己的RDD进行处理,因此总共有100每批处理RDD。 IMO,“ RDD量”并不是很重要,因为您每个间隔总是得到1个RDD。