У меня есть случай, когда я хочу прочитать данные из Kafka
в пакетном режиме, используя Apache Beam
с Spark Runner.
Используя withMaxNumRecords(long)
метод класса KafkaIO
, можносделать BoundedReader
из UnboundedReader
. Но я обнаружил, что в пакетном режиме данные сначала считываются из каждого раздела, помещаются в память, а затем передаются следующему действию (карта, фильтр и т. Д.).
У меня огромные данные в каждом разделе, и при чтении этих данных в пакетном режиме я получаю ошибку OOM
. Я пытался увеличить память исполнителя. Но для каждого запуска я не могу настроить этот параметр с требуемым значением. Другое дело, что я могу читать те же данные в потоковом режиме.
Я думаю, что это происходит, потому что в пакетном режиме все записи из каждого раздела назначаются на GlobalWindow
(часть ProcessContext), которыйсрабатывает только все данные читаются. Это может произойти из-за проблемы OOM
.
Если это причина, то как я могу изменить GlobalWindow
на PartitioningWindow
в ProcessContext?
Если это не причина, тоКак я могу прочитать эти огромные данные из Kafka в пакетном режиме, используя Apache Beam, не увеличивая память исполнителя для каждого запуска?