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

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

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

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

Отправка идентификатора корреляции

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

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

Сетевой протокол Kafka

Брокеры Kafka общаются с клиентами по сетевому протоколу Kafka. Он использует модель «запрос — ответ»: клиент отправляет сообщение запроса, а брокер возвращает сообщение ответа.

Сообщение Kafka состоит из трёх частей:

  1. message_size.
  2. Заголовок.
  3. Тело.

На этом этапе можно игнорировать тело и сосредоточиться на message_size и заголовке. Тела ответов мы рассмотрим позже.

Поле message_size

Поле message_size — 32-битное целое число со знаком, задающее размер заголовка и тела в байтах.

Все целые числа в протоколе Kafka используют порядок байтов big-endian. Например, message_size, равное 2, выглядит так:

00 00 00 02  // message_size: 2

На этом этапе достаточно, чтобы поле message_size занимало 4 байта. Правильные значения message_size вы реализуете позже.

Заголовок ответа v0

В Kafka есть несколько версий заголовка. На этом этапе вы используете заголовок ответа v0 — самую простую версию.

Заголовок ответа v0 содержит единственное поле: correlation_id. Оно позволяет клиенту сопоставлять ответы с исходными запросами.

Поле correlation_id также является 32-битным целым числом со знаком. На этом этапе программа должна возвращать жёстко заданное значение correlation_id, равное 7.

Таким образом, весь ответ должен занимать 8 байт: 4 байта для message_size и 4 байта для заголовка (correlation_id).

00 00 00 00  // message_size:   0 (any value works for this stage)
00 00 00 07  // correlation_id: 7

Тесты

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

$ ./your_program.sh

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

$ echo -n "Placeholder request" | nc -v localhost 9092 | hexdump -C

Брокер должен отправить ответ следующей структуры:

00 00 00 00  // message_size:   0 (any value works for this stage)
00 00 00 07  // correlation_id: 7

Тестирующая система проверит, что:

  • Общая длина ответа — 8 байт: 4 для message_size и 4 для correlation_id.
  • Поле correlation_id содержит 7.

Примечания

  • На этом этапе разбирать запрос не нужно. Вы научитесь этому позже.
  • Все целые числа используют порядок байтов big-endian.

Проверка в вашей 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 nv3

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

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

go / ЛОКАЛЬНО

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

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

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

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