Задержка потребителя Flink после объединения потоков, обновленных с разной частотой

#apache-flink

#apache-flink

Вопрос:

Мы используем Flink 1.2.1, и мы потребляем из 2 потоков kafka путем объединения одного потока в другой и обработки объединенного потока. например, stream1.union (stream2) Однако stream2 имеет более чем в 100 раз больший объем, чем stream1, и мы сталкиваемся с огромным отставанием в потреблении (более 3 дней данных) для stream2, но очень небольшим отставанием в stream1. У нас уже есть 9 разделов, но 1, как параллелизм, увеличил бы параллелизм, решив проблему задержки потребления для stream2, или мы вообще не должны делать объединение в этом случае.

Комментарии:

1. Что TimeCharacteristic для среды выполнения?

2. Мы используем время обработки по умолчанию в качестве временной характеристики.

Ответ №1:

.union() Не должно способствовать временной задержке, AFAIK.

И да, увеличение параллелизма должно помочь, если на самом деле задержка в обработке связана с тем, что ваши операторы-потребители (или приемник) ограничены процессором.

Если проблема связана с чем-то на стороне приемника, с чем не может помочь более высокий параллелизм (например, вы записываете в базу данных, и она работает с максимальной скоростью приема), то увеличение параллелизма приемника, конечно, не поможет.

Ответ №2:

Да, попробуйте увеличить параллелизм для источника stream2 — это должно помочь: env.addSource(kafkaStream2Consumer).setParallelism(9)

На данный момент у вас есть узкое место в 1 ядре, которому необходимо не отставать от потребления данных stream2. Чтобы полностью использовать параллелизм Kafka, параллелизм FlinkKafkaConsumer должен быть > = количеству тематических разделов, из которых он потребляет.