#javascript #sockets #apache-kafka
#javascript #сокеты #apache-kafka
Вопрос:
Недавно я пытался создать клиентскую библиотеку для Kafka на JavaScript (аналогично kafkaj).
Я изучил, как это делает kafkaj, и я успешно извлек сообщение из темы, открыв сокет и написав протокол Kafka.
Проблема, с которой я сталкиваюсь, заключается в том, что сразу после того, как я отправляю первый запрос (выборку) брокеру и получаю ответ, брокер отправляет пакет FIN и завершает сокет.
Я думаю, что такое поведение ненормально, и я искал в официальных документах, а также в коде kafkaj, я ничего не смог найти.
const socket = new net.Socket();
socket.connect(9092, 'localhost');
socket.setKeepAlive(true, 60000);
socket.write(payload.buffer, 'binary');
//rest of the events (end, data, error) are here.
Ответ №1:
У Kafka есть свой собственный протокол TCP, который реализован в нескольких библиотеках Nodejs. Было бы лучше использовать их, а не реализовывать самостоятельно, но если вам нужно, первым действием является отправка запроса начальной загрузки, а не полезной нагрузки, затем записи производителя отправляются пакетами в определенные тематические разделы определенных брокеров (даже если есть только один брокер).
Не уверен в вашей проблеме с FIN, но если это то, что возвращает сервер, то каким-то образом другие клиенты будут с этим справляться
Кроме того, kafkaj — это библиотека на стороне сервера. В идеале у вас не было бы клиента (браузера), который напрямую связывался бы с Kafka
Комментарии:
1. Ну, моя проблема — это проблема с fin, и я считаю это неестественным, потому что нет никакого смысла повторно открывать сокеты для каждого отдельного запроса.