Порядок обработки сообщений в потоке Кафки, имеющих топологию с более чем одним источником - PullRequest
0 голосов
/ 10 мая 2018
Topology streamTopology = new Topology();

streamTopology.addSource("Source1", "Topic1").addSource("Source2", "Topic2")
              .addProcessor("Processor1", () -> new TestStreamProcessor1(), "Source1")
              .addProcessor("Processor2", () -> new TestStreamProcessor2(), "Source2")
              .addStateStore(Stores.keyValueStoreBuilder(Stores.inMemoryKeyValueStore("TestStatestore"),
                        Serdes.String(), Serdes.String()), "Processor1", "Processor2");
KafkaStreams streams = new KafkaStreams(streamTopology, props);
streams.start();

Если сообщения приходят по обеим темам, в каком порядке сообщения обрабатываются и передаются в хранилище состояний?

1 Ответ

0 голосов
/ 10 мая 2018

В этом случае нет гарантии заказа. Kafka гарантирует доставку только по порядку для каждого раздела, но не для разных разделов (или для разных тем - данные в разных темах, очевидно, находятся в разных разделах).

Обратите внимание, что при использовании API процессора, добавление хранилища само по себе недостаточно для помещения данных в хранилище. Вам нужно написать код в Processor#process(), чтобы поместить данные в хранилище.

...