我必须编写spark流(CreateDirectStreamAPI)代码。我将收到约90k消息每秒,所以虽然使用100个分区的Kafka主题,以提高性能。
你能告诉我我应该用多少遗嘱执行人吗?我可以使用50个执行器和每个执行器2个内核吗?
另外,考虑一下如果批处理间隔是10秒,kafka主题的分区数是100,我是否会从每个kafka分区接收100个rdd,即1个rdd?在10秒的批处理间隔内,每个分区只有1个rdd。
谢谢
我必须编写spark流(CreateDirectStreamAPI)代码。我将收到约90k消息每秒,所以虽然使用100个分区的Kafka主题,以提高性能。
你能告诉我我应该用多少遗嘱执行人吗?我可以使用50个执行器和每个执行器2个内核吗?
另外,考虑一下如果批处理间隔是10秒,kafka主题的分区数是100,我是否会从每个kafka分区接收100个rdd,即1个rdd?在10秒的批处理间隔内,每个分区只有1个rdd。
谢谢
1条答案
按热度按时间tvokkenx1#
实际上,没有好的答案,这取决于集群中有多少executor内存+内核。
硬性限制是,执行器进程的总数不能超过kafka分区,并且不希望使网络或其他io饱和。
因此,首先要确定是否要用一个执行器对网络和/或内存/磁盘进行封顶,然后运行两个执行器,看看在一台机器上吞吐量是否翻倍,网络速率是否减半。然后根据需要扩展核心和示例。
dropbox最近写了一篇关于性能测试的博客
关于rdd,假设您有一个1:1的执行器示例到分区的Map,那么每个执行器每个间隔只能看到一个分区10秒的数据,并且每个执行器都有自己的rdd要处理,因此每批处理100个rdd。在我看来,“rdd的数量”并不太重要,因为每次间隔都会得到1个rdd。