Структура сообщений в Apache Kafka: таймстампы и смещения

Каждое сообщение, хранящееся на брокере Kafka, неизменно. Это значит, что изменить его содержимое после записи невозможно. Однако каждое сообщение имеет определённую структуру.

Основные компоненты сообщения

Каждое сообщение содержит:

  • Метка времени (Timestamp): Назначается либо брокером Kafka, либо производителем (producer). Это настраиваемый параметр.
  • Номер смещения (Offset): Уникален только в пределах раздела (partition) в конкретной теме (topic).
  • Ключ (Key): Необязательный параметр.
  • Значение (Value): Последовательность байтов. Брокер Kafka не интерпретирует данные; он хранит только байты. Поэтому Apache Kafka позволяет передавать различные типы данных: объекты, строки, числа и файлы (после кодирования).

> Важно: Для эффективности сообщения должны быть небольшого размера. Избегайте отправки больших объёмов данных, например, целых фильмов, в одном сообщении. Apache Kafka оптимизирован для быстрой передачи небольших сообщений.

Использование ключа

Необязательный ключ позволяет группировать сообщения внутри темы.

Например, несколько магазинов отправляют данные о продажах в централизованный сервис Apache Kafka. Используя ключ, содержащий имя магазина, можно отслеживать источник каждого сообщения.

Ключи создаются производителями и отправляются брокерам Kafka. Сообщения с одинаковым ключом попадают в один и тот же раздел. Использование ключа позволяет направлять сообщения в определённый раздел.

Структура сообщения: кратко

Каждое сообщение имеет:

  1. Уникальный номер смещения (offset) в пределах раздела.
  2. Метку времени (timestamp).
  3. Тело сообщения (value).
  4. Необязательный ключ (key).

> Запомните: Для максимальной производительности кластера Apache Kafka старайтесь минимизировать размер каждого сообщения.

Что будем искать? Например,программа