Проектная лаборатория

Собственная Kafka

0 / 25этапов пройдено

Этап 03 · Основные этапы

Разбор идентификатора корреляции

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы замените жёстко заданный идентификатор корреляции настоящим идентификатором из запроса.

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

Напомним формат сообщений запросов и ответов Kafka:

  1. message_size: размер заголовка и тела.
  2. Заголовок: метаданные запроса.
  3. Тело: сами данные запроса.

На предыдущем этапе вы отправляли ответ с фиксированным correlation_id. Теперь вы извлечёте настоящий correlation_id из заголовка входящего запроса и вернёте его в ответе.

Разбор заголовка запроса

Чтобы извлечь correlation_id, нужно разобрать заголовок запроса. На этом этапе используется заголовок запроса v2.

Его структура:

Поле Тип данных Размер (байты) Описание
request_api_key INT16 2 Ключ API запроса
request_api_version INT16 2 Версия API запроса
correlation_id INT32 4 Уникальный идентификатор запроса
client_id NULLABLE_STRING Переменный Идентификатор клиента запроса
TAG_BUFFER TAGGED_FIELDS Переменный Необязательные поля с тегами

Подробнее о типах данных см. Примитивные типы протокола.

Чтобы получить поле correlation_id, нужно определить его смещение в сообщении запроса. Пример запроса с расположением полей:

00 00 00 23  // message_size:        35
00 12        // request_api_key:     18
00 04        // request_api_version: 4
6f 7f c6 61  // correlation_id:      1870644833
...

Структура ответа остаётся такой же, как на предыдущем этапе:

00 00 00 00  // message_size:   0 (any value works for this stage)
6f 7f c6 61  // correlation_id: 1870644833 (extracted from request)

Тесты

Тестирующая система запустит вашу программу следующим образом:

$ ./your_program.sh

Затем подключится к брокеру на порту 9092 и отправит запрос с заголовком запроса v2:

$ echo -n "00000023001200046f7fc66100096b61666b612d636c69000a6b61666b612d636c6904302e3100" | xxd -r -p | nc localhost 9092 | hexdump -C

Брокер должен извлечь идентификатор корреляции из запроса и вернуть его в ответе:

00 00 00 00  // message_size:   0 (any value works for this stage)
6f 7f c6 61  // correlation_id: 1870644833

Примечания

  • Пока не нужно разбираться, что именно запрашивает клиент. Вы займётесь этим позже.
  • На этом этапе тестирующая система проверяет только длину поля message_size — 4 байта, но не его значение. Правильные значения message_size вы реализуете позже.
  • Версии заголовков запроса и ответа независимы и не обязаны совпадать.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init kafka ./my-kafka --language go

2. Откройте папку в IDE

cd ./my-kafka

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage wa6

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста