Этот вопрос проверяет знание структуры сообщения Kafka, что необходимо для понимания, как данные передаются и хранятся в распределённой системе потоковой обработки.
Сообщение в Apache Kafka, часто называемое записью (record), является основной единицей данных, передаваемой через систему. Понимание его полей критически важно для эффективного проектирования продюсеров и консьюмеров, так как эти поля определяют, как данные маршрутизируются, хранятся и интерпретируются.
Вот как может выглядеть создание сообщения с использованием клиента Java:
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.header.internals.RecordHeader;
// Создание сообщения с ключом, значением и заголовками
String topic = "user-events";
String key = "user123"; // Определит партицию
String value = "{\"action\": \"login\", \"time\": \"2023-10-01\"}";
ProducerRecord record = new ProducerRecord<>(topic, key, value);
// Добавление заголовка
record.headers().add(new RecordHeader("trace-id", "abc-123".getBytes()));
// Timestamp будет установлен автоматически, если не задан явно
// record = new ProducerRecord(topic, null, System.currentTimeMillis(), key, value);Поля сообщения используются на всех этапах работы с Kafka. Ключ обеспечивает семантику упорядочивания и используется при агрегации в KStreams. Заголовки удобны для сквозной трассировки в микросервисной архитектуре. Смещение и временная метка — основа для управления потреблением (например, консьюмер может начать читать с определённого времени) и политик хранения данных.
Вывод: Понимание полей сообщения Kafka необходимо для построения корректных потоков данных, где важны порядок, маршрутизация и обогащение метаданными. Используйте ключ для обеспечения порядка событий по сущности, заголовки для служебной информации, а смещение и временную метку для управления состоянием консьюмера и хранением.