2015-12-01 3 views
1

У меня есть 4 типа тем кафки и 65 тем каждого типа. Цель состоит в том, чтобы сделать некоторую простую оконную агрегацию данных и записать ее в БД.Флинк - структурирование для максимальной пропускной способности

Топологии будет выглядеть примерно так:

Кафка -> Окно -> уменьшить -> дб написать

Где-то в этой смеси я хочу/нужно сделать союз - или, возможно, несколько (в зависимости от того, сколько тем одновременно объединяется).

Поток данных по темам варьируется от 10K до 200K сообщений/мин.

У меня есть четырехузловой флинковый кластер с 30 ядрами/узлом. Как я могу построить эти топологии для распространения нагрузки?

+0

Быстрый вопрос, чтобы избежать путаницы: есть ли у вас всего 260 тем Кафки и каждый из них имеет несколько разделов или 4 темы Кафки с каждым 65 разделами? В последнем случае разложение произойдет естественным образом. –

+0

260 тем с одним разделом. – ethrbunny

ответ

3

Я пишу этот ответ, предполагая, что каждая из 65 тем одного типа содержит один и тот же тип данных.

Простейшим решением этой проблемы было бы изменить настройку Kafka таким образом, чтобы у вас было 4 темы с 65 разделами каждый. Тогда у вас есть 4 источника данных в программе, с высоким параллелизмом (65), и это распределяется по кластеру естественным образом.

Если не удается изменить настройки, я вижу две вещи, которые вы можете сделать:

  • Одним из возможных решений является создание модифицированной версии FlinkKafkaConsumer, где один источник может потреблять несколько разделов (а чем только несколько разделов одной темы). С этим изменением он будет работать в значительной степени, как если бы вы использовали много разделов, а не многие темы. Если вы хотите пойти с этим решением, я бы отправил список рассылки, чтобы получить определенную поддержку для этого. Это было бы ценным дополнением к коду Flink.

  • Вы можете указать каждому источнику отдельную группу ресурсов, которая даст ему выделенный слот. Вы можете сделать это через «env.addSource (новый FlinkKafkaConsumer (...)). StartNewResourceGroup();». Но здесь наблюдение заключается в том, что вы пытаетесь выполнить 260 различных источников на кластере с 120 ядрами (и, следовательно, вероятно, 120 слотов задач). Вам нужно будет увеличить количество слотов для выполнения всех задач.

Я думаю, что первым вариантом является предпочтительный вариант.

+0

Итак, если я пойду «как есть», он попытается поместить все на одну машину? Unf изменение разделов не является вариантом. – ethrbunny

+0

Если вы не укажете «startNewResourceGroup()», планирование будет пытаться повторно использовать существующие группы ресурсов, что может привести к тому, что они будут использовать один и тот же компьютер. На мой взгляд, лучшим вариантом является Multi-Topic KafkaConsumer. –

+1

Я добавлю поддержку для чтения из нескольких тем с одним FlinkKafkaConsumer https://issues.apache.org/jira/browse/FLINK-3102 –

Смежные вопросы