#apache-kafka #spring-kafka
#apache-kafka #spring-kafka
Вопрос:
Я использую Spring Kafka для разработки своего проекта. Я использую тему, которая имеет:
partitions : 5
min.insync.replicas: 3
Итак, какие бы сообщения ни отправлял производитель, в том же порядке мне нужно обрабатывать сообщения от потребителя Kafka.
Я просмотрел некоторую документацию, и там было указано, что нам нужно использовать key в producer, чтобы он попал в определенный раздел. Я новичок в Kafka и не уверен, как я это реализую.
Ниже приведены свойства для потребителя Kafka:
props.put(BOOTSTRAP_SERVERS_CONFIG, bootstrapServer);
props.put(GROUP_ID_CONFIG, "prj_1");
props.put(KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(AUTO_OFFSET_RESET_CONFIG, "latest");
props.put(ENABLE_AUTO_COMMIT_CONFIG, Boolean.FALSE);
И следующий код предназначен для KafkaListener:
@KafkaListener(topics = "${test.topic}")
public void consume(
@NotNull final ConsumerRecord<String, String> cr,
@Payload final String payload,
final Acknowledgment acknowledgment) {
try{
final XYZObject xyzObject =
objectMapper.readValue(payload, XYZObject.class);
final Response response = processPayload(xyzObject);
publishResponseToKafka(response, xyzObject);
log.info(
"publishResponseToKafka() took ="{}"ms", Duration.between(pblshTime,
Instant.now()).toMillis());
} finally {
acknowledgment.acknowledge();
}
}
С нетерпением ждем от вас всех.
Спасибо.
Комментарии:
1. Был дан ответ много раз: порядок потребления не гарантируется для более чем одного раздела. Ключи помогают разделять данные, а не упорядочивать потребление (если вы явно не назначаете потребителя для обработки отдельных разделов)
2. Также не ясен ваш вариант использования. Имеют ли XYZ и время T какое-либо отношение к new_XYZ в момент времени T 1? Если нет, действительно ли порядок имеет значение?
3. Спасибо @OneCricketeer XYZ, и время T было частью моего примера. это не связано с моим вопросом. У меня ситуация, когда мне нужно обрабатывать сообщения в том же порядке, в котором они были опубликованы производителем. Итак, если производитель создал, например, msg1, msg2, msg3, msg4 и msg5 в следующем порядке: Создано: msg2 -> msg3 -> msg1 -> msg5 -> msg4, тогда мой потребитель должен получать сообщения в том же порядке: Потребитель: msg2 -> msg3 -> msg1 -> msg5 -> msg4 с учетом5 раздел.
4. Если все они имеют один и тот же ключ, то они вынуждены упорядочиваться таким образом, как указано