具有多源拓扑的 Kafka 流中消息的处理顺序

Processing order of messages in Kafka stream having topology with more than one source

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();

如果消息同时出现在两个主题上,消息将按什么顺序处理并传递到 statestore?

这种情况下没有订购保证。 Kafka 只保证每个分区的有序传递,但不能保证跨分区(或跨主题---不同主题的数据显然在不同的分区中)。

但请注意,使用处理器 API,添加存储本身不足以将数据放入存储中。您需要在 Processor#process() 中编写代码以将数据放入存储区。