параллельно пишет разные темы из одной темы потока

У меня есть поток, который дает карту сообщений для двух разных вызовов 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() звонок сможет работать параллельно со всем, что было до него.