Каждое сообщение, хранящееся на брокере Kafka, неизменно. Это значит, что изменить его содержимое после записи невозможно. Однако каждое сообщение имеет определённую структуру.
Основные компоненты сообщения
Каждое сообщение содержит:
- Метка времени (Timestamp): Назначается либо брокером Kafka, либо производителем (producer). Это настраиваемый параметр.
- Номер смещения (Offset): Уникален только в пределах раздела (partition) в конкретной теме (topic).
- Ключ (Key): Необязательный параметр.
- Значение (Value): Последовательность байтов. Брокер Kafka не интерпретирует данные; он хранит только байты. Поэтому Apache Kafka позволяет передавать различные типы данных: объекты, строки, числа и файлы (после кодирования).
> Важно: Для эффективности сообщения должны быть небольшого размера. Избегайте отправки больших объёмов данных, например, целых фильмов, в одном сообщении. Apache Kafka оптимизирован для быстрой передачи небольших сообщений.
Использование ключа
Необязательный ключ позволяет группировать сообщения внутри темы.
Например, несколько магазинов отправляют данные о продажах в централизованный сервис Apache Kafka. Используя ключ, содержащий имя магазина, можно отслеживать источник каждого сообщения.
Ключи создаются производителями и отправляются брокерам Kafka. Сообщения с одинаковым ключом попадают в один и тот же раздел. Использование ключа позволяет направлять сообщения в определённый раздел.
Структура сообщения: кратко
Каждое сообщение имеет:
- Уникальный номер смещения (offset) в пределах раздела.
- Метку времени (timestamp).
- Тело сообщения (value).
- Необязательный ключ (key).
> Запомните: Для максимальной производительности кластера Apache Kafka старайтесь минимизировать размер каждого сообщения.