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



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

从文档中,我可以看到有人试图在同一个工作人员的任务中使用同一个生产者当同时发送大量记录时,网络将成为瓶颈(以及内存,因为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(如果您不想拥有持久流,您可以始终使用选项trigger一次(。此外,您可以假设1个数据帧分区=1cpu,因此您可以另外优化这种方式(但流中的数据块通常会自动处理(。

在Kafka方面,我想拥有许多类似于spark/databricks工作程序的分区/代理可能是件好事。

最新更新