【发布时间】:2019-12-11 06:53:25
【问题描述】:
我有一个用例,我想使用带有 Spark runner 的 Apache Beam 在批处理模式下从 Kafka 读取数据。
使用KafkaIO类的withMaxNumRecords(long)方法,可以从UnboundedReader生成BoundedReader。但我发现,在批处理模式下,首先从每个分区读取数据,放入内存,然后传递给下一个操作(映射、过滤器等)。
我在每个分区中都有大量数据,在以批处理模式读取这些数据时,我收到OOM 错误。我试图增加执行者内存。但是对于每次运行,我都无法为这个参数配置所需的值。
另一件事是,我可以在流模式下读取相同的数据。
我认为它正在发生,因为在批处理模式下,每个分区的所有记录都分配给GlobalWindow(ProcessContext 的一部分),这会触发仅读取所有数据。这可能是因为OOM 问题。
如果是这个原因,那我如何在 ProcessContext 中将GlobalWindow 更改为PartitioningWindow?
如果这不是原因,那么我如何使用 Apache Beam 以批处理模式从 Kafka 读取这些庞大的数据,而不增加每次运行的执行器内存?
【问题讨论】:
-
你能澄清一下你所说的 executor memory 是什么意思吗?你在使用 Spark 跑步者吗?
-
@JayadeepJayaraman :是的,我正在使用 spark runner。
标签: apache-spark apache-kafka batch-processing apache-beam