Проектная лаборатория
Собственная Kafka
Этап 08 · Список разделов
Добавление DescribeTopicPartitions в ApiVersions
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите запись API DescribeTopicPartitions в ответ ApiVersions.
API ApiVersions: повторение
Напомним: API ApiVersions возвращает поддерживаемые брокером версии API. Ответ содержит список API с минимальной и максимальной поддерживаемыми версиями каждого.
На предыдущих этапах вы реализовали ответ ApiVersions с единственной записью для самого API ApiVersions. Теперь добавите вторую запись — для API DescribeTopicPartitions.
API DescribeTopicPartitions
API DescribeTopicPartitions возвращает метаданные топиков и их разделов. На этом этапе достаточно объявить его поддержку в ответе ApiVersions. Саму обработку API вы реализуете позже.
Теперь массив api_keys ответа ApiVersions должен содержать две записи:
ApiVersions(ключ API18):min_version0,max_version4.DescribeTopicPartitions(ключ API75):min_version0,max_version0.
Пример обновлённого ответа:
00 00 00 1d // message_size: 29 bytes
ab cd ef 12 // correlation_id: (matches request)
00 00 // error_code: 0 (no error)
03 // api_keys array: 2 elements (compact array encoding)
00 12 // api_key: 18 (ApiVersions)
00 00 // min_version: 0
00 04 // max_version: 4
00 // TAG_BUFFER: empty
00 4b // api_key: 75 (DescribeTopicPartitions)
00 00 // min_version: 0
00 00 // max_version: 0
00 // TAG_BUFFER: empty
00 00 00 00 // throttle_time_ms: 0
00 // TAG_BUFFER: emptyТесты
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh /tmp/server.propertiesЗатем подключится к серверу на порту 9092 и отправит корректный запрос ApiVersions (v4):
$ echo -n "0000001a0012000467890abc00096b61666b612d636c69000a6b61666b612d636c6904302e3100" | xxd -r -p | nc localhost 9092 | hexdump -CОна проверит, что:
- Поле
message_sizeправильно отражает размер заголовка и тела. - Идентификатор корреляции в заголовке ответа совпадает с идентификатором в заголовке запроса.
- Поле
error_codeв теле ответа равно0(нет ошибки). - Тело ответа содержит записи для ключей API 18 (
ApiVersions) и 75 (DescribeTopicPartitions). - Запись ключа API
18(ApiVersions) содержитmin_version, равное0, иmax_versionне меньше4. - Запись ключа API
75(DescribeTopicPartitions) содержитmin_version, равное0, иmax_versionне меньше0.
Примечания
- Чтобы проходить предыдущие этапы, ответ по-прежнему должен содержать запись
ApiVersions. - Обработку запроса
DescribeTopicPartitionsмы реализуем позже. Пока достаточно добавить запись в ответ ApiVersions.
Проверка в вашей 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 yk1Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.