У меня небольшая проблема, и это то, что мне нужно использовать kafka в качестве системы уведомлений для запуска потоков моего приложения, все в порядке, но я хотел бы знать, могу ли я изменить порядок, когда есть непрочитанные сообщения в очереди.
Позвольте мне объяснить: когда в топи c есть два или более сообщения, и потребитель их читает, сначала прочитайте последнее, которое вошло, и я хочу, чтобы он прочитал сначала первый, который вошел.
Итак, я хотел знать, возможно ли это, и если да, то что мы должны изменить для него.
Я использую последнюю версию Spring Apache и Kafka 2.5.0
ConsumerConfig:
@EnableKafka
@Configuration
public class KafkaConsumerConfig {
private static final String BOOTSTRAP_ADDRESS = "";
@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_ADDRESS);
props.put(ConsumerConfig.GROUP_ID_CONFIG, "id");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
KafkaConsumer:
@Component
public class KafkaConsumer {
@KafkaListener(topics = "Great_Topic")
private void listen(String msg) {
System.out.println("I've received: " + msg);
}
}
Пример:
У моего производителя отправил следующие сообщения в этом порядке:
- Hello World 1
- Hello World 2
Вывод на потребителе:
- Hello World 2
- Hello World 1
Я хочу, чтобы на выходе был тот же порядок, что и ввод.