Применима ли масштабируемость к потоку Kafka, если каждая тема имеет один раздел

Насколько я понимаю, согласно документации потока Kafka, Максимально возможное количество параллельных задач равно максимальному количеству разделов темы среди всех тем в кластере.

У меня около 60 тем в кластере Кафки. Каждая тема имеет только один раздел. Можно ли достичь масштабируемости / параллелизма с потоком Kafka для моего кластера Kafka?

1 ответ

Решение

Вы хотите сделать одно и то же вычисление по всем темам? Для этого я бы рекомендовал ввести дополнительную тему со многими разделами, которые вы используете для масштабирования:

// using new 1.0 API
StreamsBuilder builder = new StreamsBuilder():
KStream parallelizedStream = builder
    .stream(/* subscribe to all topics at once*/)
    .through("topic-with-many-partitions");

// apply computation
parallelizedStream...

Примечание. Перед запуском приложения Streams необходимо создать тему "topic-with-many-partition" вручную.

Pro Совет:

Тема "тема со многими разделами" может иметь очень короткое время хранения, поскольку она используется только для масштабирования и не должна содержать данные в течение длительного времени.

Обновить

Если у вас есть 10 тем T1-T10 с одним разделом на каждом, программа сверху будет выполняться следующим образом (с TN является фиктивной темой с 10 разделами):

T1-0  --+           +--> TN-0   --> T1_1
...   --+--> T0_0 --+--> ...    --> ...
T10-0 --+           +--> TN-10  --> T1_10

Первая часть вашей программы будет читать только все 10 входных тем и записывать их обратно в 10 разделов TN. После этого вы можете получить до 10 параллельных задач, каждая из которых обрабатывает один входной раздел. Если вы начнете 10 KafakStreams экземпляры, только один будет выполнять T0_0, и каждый из них будет также один T1_x работает.

Другие вопросы по тегам