Kafka 主题分区到 Spark 流
Kafka topic partitions to Spark streaming
关于 Kafka 主题分区 -> Spark 流资源利用,我有一些用例想进一步说明。
我使用 spark 独立模式,所以我只有 "total number of executors" 和 "executor memory" 的设置。据我所知,根据文档,将并行性引入 Spark 流的方法是使用分区的 Kafka 主题 -> 当我使用 spark-kafka 直接流集成时,RDD 将具有与 kafka 相同数量的分区。
所以如果我在主题中有 1 个分区和 1 个执行器核心,该核心将从 Kafka 顺序读取。
如果我有会怎样:
主题中有2个分区,只有1个执行核心?该核心是否会先从一个分区读取然后从第二个分区读取,因此对主题进行分区没有任何好处?
主题中有2个分区和2个核心?那么 1 个执行程序核心会从 1 个分区读取,第二个核心从第二个分区读取吗?
1个kafka分区和2个执行核心?
谢谢。
基本规则是您可以将 扩展到 Kafka 分区的数量。如果设置 spark.executor.cores
大于分区数,一些线程将处于空闲状态。如果它小于分区数,Spark 将从一个分区读取线程,然后从另一个分区读取。所以:
2 个分区,1 个执行程序:先从一个分区读取,然后再从另一个分区读取。 (我不确定 Spark 如何决定在切换之前从每个读取多少)
2p、2c:并行执行
1p,2c: 一个线程空闲
对于案例 #1,请注意,分区数多于执行程序数是可以的,因为它允许您稍后横向扩展而无需重新分区。诀窍是确保您的分区可以被执行者的数量整除。在将数据传递到管道中的下一步之前,Spark 必须处理 all 个分区。因此,如果您有 'remainder' 个分区,这会减慢处理速度。例如,5 个分区和 4 个线程 => 处理需要 2 个分区的时间 - 一次处理 4 个,然后一个线程 运行 第 5 个分区本身。
另请注意,如果通过在 reduceByKey()
.[=12= 等函数中显式设置数据分区的数量,使整个管道中的分区/RDD 数量保持相同,您可能还会看到更好的处理吞吐量]
关于 Kafka 主题分区 -> Spark 流资源利用,我有一些用例想进一步说明。
我使用 spark 独立模式,所以我只有 "total number of executors" 和 "executor memory" 的设置。据我所知,根据文档,将并行性引入 Spark 流的方法是使用分区的 Kafka 主题 -> 当我使用 spark-kafka 直接流集成时,RDD 将具有与 kafka 相同数量的分区。
所以如果我在主题中有 1 个分区和 1 个执行器核心,该核心将从 Kafka 顺序读取。
如果我有会怎样:
主题中有2个分区,只有1个执行核心?该核心是否会先从一个分区读取然后从第二个分区读取,因此对主题进行分区没有任何好处?
主题中有2个分区和2个核心?那么 1 个执行程序核心会从 1 个分区读取,第二个核心从第二个分区读取吗?
1个kafka分区和2个执行核心?
谢谢。
基本规则是您可以将 扩展到 Kafka 分区的数量。如果设置 spark.executor.cores
大于分区数,一些线程将处于空闲状态。如果它小于分区数,Spark 将从一个分区读取线程,然后从另一个分区读取。所以:
2 个分区,1 个执行程序:先从一个分区读取,然后再从另一个分区读取。 (我不确定 Spark 如何决定在切换之前从每个读取多少)
2p、2c:并行执行
1p,2c: 一个线程空闲
对于案例 #1,请注意,分区数多于执行程序数是可以的,因为它允许您稍后横向扩展而无需重新分区。诀窍是确保您的分区可以被执行者的数量整除。在将数据传递到管道中的下一步之前,Spark 必须处理 all 个分区。因此,如果您有 'remainder' 个分区,这会减慢处理速度。例如,5 个分区和 4 个线程 => 处理需要 2 个分区的时间 - 一次处理 4 个,然后一个线程 运行 第 5 个分区本身。
另请注意,如果通过在 reduceByKey()
.[=12= 等函数中显式设置数据分区的数量,使整个管道中的分区/RDD 数量保持相同,您可能还会看到更好的处理吞吐量]