Применима ли масштабируемость к потоку 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 работает.