Как правильно взаимодействовать с брокером Kafka через сокет?

#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, и я считаю это неестественным, потому что нет никакого смысла повторно открывать сокеты для каждого отдельного запроса.