Проектная лаборатория
Собственная Kafka
Этап 02 · Основные этапы
Отправка идентификатора корреляции
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы отправите ответ с идентификатором корреляции.
Сетевой протокол Kafka
Брокеры Kafka общаются с клиентами по сетевому протоколу Kafka. Он использует модель «запрос — ответ»: клиент отправляет сообщение запроса, а брокер возвращает сообщение ответа.
Сообщение Kafka состоит из трёх частей:
message_size.- Заголовок.
- Тело.
На этом этапе можно игнорировать тело и сосредоточиться на 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 go2. Откройте папку в IDE
cd ./my-kafkaРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage nv3Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.