В Kafka вы можете быть уверены, что порядок сообщений в том же разделе одинаков, но не в теме.
Note that as a topic typically has multiple partitions, there is
no guarantee of message time-ordering across the entire topic, just within a single
partition
Цитата из книги Kafka: The Definitive Guide: Real-Time Data and Stream Processing at Scale
.Что вы можете сделать по этому поводу и как получать сообщения по порядку?Вариант 1:
kafkaTemplate.send(TOPIC,"1", "TEST1".getBytes()).get();
kafkaTemplate.send(TOPIC,"1", "TEST2".getBytes()).get();
kafkaTemplate.send(TOPIC,"1", "TEST3".getBytes()).get();
kafkaTemplate.send(TOPIC,"1", "TEST4".getBytes()).get();
kafkaTemplate.send(TOPIC,"1", "TEST5".getBytes()).get();
Таким образом, для каждого значения вы посылаете один и тот же ключ «1».Кафка выберет раздел на основе вашего ключа.Поскольку все ключи равны, все сообщения будут отправляться в один и тот же раздел, и вы получите свои записи в следующем порядке.
Вариант 2: Инициализируйте KafkaEmbedded таким образом:
new KafkaEmbedded(1, true,1, TOPIC);
Таким образом, выГоворя Кафке, что для этой темы вы хотели бы иметь только один раздел, чтобы каждая запись шла в этот раздел.