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

时间:2018-05-10 09:14:11

标签: apache-kafka apache-kafka-streams

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?

1 个答案:

答案 0 :(得分:0)

此案例没有订购保证。 Kafka只保证每个分区的按顺序交付,但不保证跨分区(或跨主题---不同主题中的数据显然位于不同的分区中)。

请注意,使用Processor API,添加商店本身并不足以将数据放入商店。您需要在Processor#process()中编写代码以将数据放入商店。