Можно ли «сказать» брокеру Kafka вообще не отправлять полезную нагрузку записи клиенту? Я знаю, что вы можете настроить прослушиватель так, чтобы он не получал его, не указав его в качестве аргумента:
@KafkaListener(
topics = "myTopic",
groupId = "groupId"
)
public void listen(
@Header(name = KafkaHeaders.RECEIVED_MESSAGE_KEY, required = true) String key,
ConsumerRecordMetadata meta)
{
}
Однако измерения производительности, которые я провел с аргументом @Payload
и без него, не сильно отличались, поэтому я предполагаю, что потребительское приложение по-прежнему получает всю полезную нагрузку по сети, но просто не отправляет ее методу, аннотированному @KafkaListener
.
Я хотел бы получить только метаданные, включая ключ.
org.springframework.messaging.Message
? Если это так, то он содержит полезную нагрузку, и я намеренно использовал набор аргументов, который не содержит полезную нагрузку.
Да. Однако, как ответили, вы всегда будете получать всю полезную нагрузку от Kafka API. Разлагает ли Spring это на дополнительные параметры или нет, это отдельная проблема.
kafka-clients
API не позволяет избежать передачи записи value()
по сети.
Вы можете минимизировать локальные накладные расходы, используя ByteArrayDeserializer
для десериализатора значений, чтобы избежать выполнения каких-либо преобразований после получения.
Вы можете использовать объект
Message
, затем извлечь из него ключ и игнорировать значение вместо двух параметров.