параллельно пишет разные темы из одной темы потока
У меня есть поток, который дает карту сообщений для двух разных вызовов map(), а затем фильтруется и записывается в две разные темы.
KStream<String, byte[]>[] stream = builder.<String, byte[]>stream("source-topic");
stream.map(logic1OnData).filter(
(key, value) -> {
if (key == null || value == null)
return false;
return value.data() != null;
}).to("topic1", Produced.with(Serdes.String(), Serdes.String())
stream.map(logic2OnData).filter(
(key, value) -> {
if (key == null || value == null)
return false;
return value.data() != null;
}).to("topic2", Produced.with(Serdes.String(), Serdes.String())
Есть ли способ запустить stream.map(logc1OnData)... и stream.map(logic2OnData) параллельно? Похоже, они запускаются один за другим, т.е. первая карта выполняется и записывается в topic1, а затем выполняется вторая карта и записывается в topic2 FYI.. Я не хочу num.threads.count, поскольку мой поток вводится из одной темы и Я запускаю несколько экземпляров одного и того же приложения для чтения из исходной темы, чтобы добиться параллелизма при использовании.
Я ищу параллелизм при выполнении и записи на разные темы
1 ответ
Вы смотрите на порядок, в котором ваши операции добавляются в топологию. После выполнения топологии регистратор будет проходить через отпологию в том порядке, в котором они прибывают, ноlogic2OnData
не буду ждать logic1OnData
чтобы завершить обработку до ее запуска.
Если вас беспокоит производительность, вы можете посмотреть stream threads
если вы хотите получить больше параллелизма.
РЕДАКТИРОВАТЬ: кажется, я неправильно понял вопрос.
Одна субтопология не позволяет запускать каждую ветвь с параллелизмом. Однако вы можете использоватьrepartition()
чтобы сделать logic2OnData свою собственную суб-топологию и все, что после repartition()
звонок сможет работать параллельно со всем, что было до него.