Hi Adam, I haven't looked into your project yet, but just wanted to mention this to see if it explains your observations.
TopologyTestDriver processes every input record fully and synchronously. So, when you pipe an input record in, it traverses all internal processing, including intermediate topics, until all results are written to sink topics (or the end of the topology is reached). This may indeed result in a different order of output records than you'd observe with Kafka Streams, which would instead write to the intermediate topic in one thread and then process it in a separate thread. Does that add up with what you're seeing? Thanks, -John On Wed, Sep 11, 2019 at 6:40 AM Adam Domanski <adoman...@gmail.com> wrote: > > Hi, > > I probably found a bug in TopologyTestDriver for quite non-trivial Kafka > Streams topology. > > The streaming logic is the following: There is a concept of children and > parents. Children are aggregated under parent. Some children of master > parent can send poison pills to other parents. Such parents die but already > aggregated kids should go then to the master. Application remembers killed > parents in a local store. If a new kid comes, the store is checked and then > kid is rerouted to the master. > > I'm using intermediate topics in my topology as well as sometimes > tombstones. > > Here is Gradle (Java 11 + Kotlin) based project which demonstrate the > issue: https://github.com/czterocyty/kafka_streams_test_case > > You can see that few tests fail there as I expect that latest output Parent > records have the latest generation. > > So seems that TopologyTestDriver does not care about the order of output > records. > > Best regards, > Adam DomaĆski