繁体   English   中英

Spark 和 Kafka:如何提高生产者发送大量记录的并行度以提高网络使用率?

[英]Spark and Kafka: how to increase parallelism for producer sending large batch of records improving network usage?

我正在深入了解如何从 Spark 向 Kafka 主题发送(生成)大量记录。

文档中,我可以看到有人试图在相同工作人员的任务中使用相同的生产者。 当一次发送大量记录时,网络将成为瓶颈(以及内存,因为 kafka 会缓冲要发送的记录)。 所以我想知道提高网络使用率的最佳配置是什么:

  1. 更少的工人拥有更多的内核(所​​以我想,这意味着更多的线程)
  2. 更多的工人,每个工人的核心更少(所以我想我们将使用更好的网络 IO,因为它将分布在不同的机器上)

假设我对 1 和 2 的选项如下(来自 Databricks):

  1. 4 个工人,每个工人 16 个核心 = 64 个核心
  2. 10 个工人,每个工人 4 个核心 = 40 个核心

为了更好地利用网络IO,哪个是最好的选择?

我现在对此的想法,但我不确定,所以我在这里问你:虽然从 CPU 的角度来看(昂贵的计算工作),1)会更好(更多的并发性,更少的洗牌),从从网络 IO 的角度来看,我宁愿使用 2),即使我的整体内核数量较少。

感谢您对此的任何意见。

谢谢你们。

最好的解决方案是让更多的工人来实现并行(水平扩展)。 DataFrame 必须使用 Kafka 作为接收器的流写入到 Kafka,如这里所解释的https://docs.databricks.com/spark/latest/structured-streaming/kafka.html (如果您不想拥有持久流,您可以始终使用选项触发器一次)。 此外,您可以假设 1 个数据帧分区 = 1cpu,因此您可以另外优化这种方式(但流中的数据块通常会自动处理它)。

在 Kafka 方面,我想拥有类似于 spark/databricks 工人的分区/代理数量可能会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM