Как использовать Strimzi Kafka Bridge в качестве потокового сервиса - PullRequest
0 голосов
/ 05 октября 2019

Используя CNCF Strimzi Kafka Bridge, я создал небольшой API, который может взаимодействовать с сервером Kafka с использованием протокола HTTP / 1.1. Это все хорошо для сценария запрос-ответ. Однако мое требование состоит в том, чтобы передавать события, полученные по теме Kafka, подписанным клиентам (через мост Strimzi), как только я получу их предпочтительно по долгоживущему HTTP-соединению (согласно моему пониманию). Это бесполезная трата клиентских ресурсов, чтобы постоянно опрашивать мост для сообщений и возвращаться с пустыми руками. Я бы хотел, чтобы сервер Kafka передавал эти события напрямую клиенту.

Я немного не уверен насчет SSE или Websockets или длительного опроса. Я довольно много читал об этих методологиях для потоковой передачи данных клиенту. Тем не менее, я не могу выяснить, относятся ли эти изменения к коммуникационному или прикладному уровню или к тому и другому.

Вы просто создаете API (независимо от технологии), используя традиционный протокол HTTP-связи, и каким-то образом обновляете его для использования Websockets ИЛИ использование Websockets должно быть встроено в ваши библиотеки приложений с нуля?

Я могу предоставить больше информации, если это необходимо. На веб-сайте моста Strimzi Kafka ничего не говорится о «потоковой передаче на стороне сервера» ИЛИ, может быть, я неправильно понимаю истинную цель этого инструмента.

Ответы [ 2 ]

1 голос
/ 07 октября 2019

@ Ник думая больше, на самом деле вы можете сделать "длинный опрос". GET в конечной точке / records для получения сообщений имеет параметр timeout в строке запроса. Его значение используется в качестве таймаута для внутреннего опроса Кафки на мосту. Он каким-то образом обеспечивает длительное поведение опроса, поскольку опрос не возвращается, пока не появятся доступные записи или не истечет время ожидания. Если вы установили большой тайм-аут, вы можете получить желаемое поведение, избегая опроса больше раз с открытием / закрытием большего количества HTTP-соединений для этого. Подробнее о параметре timeout здесь:

https://strimzi.io/docs/bridge/latest/#_poll

1 голос
/ 05 октября 2019

HTTP-мост Strimzi Kafka задуман как «транслятор» для собственного протокола HTTP в Kafka и наоборот. Это означает, что HTTP-клиент должен вести себя так же, как и нативный клиент Kafka, поэтому в случае потребителя он проводит опрос для получения сообщений, как Kafka работает изначально. Imho HTTP 1.1 вообще не для потоковой передачи. Websockets - это совершенно другой протокол, который можно обновлять, конечно, начиная с HTTP-соединения, но он не поддерживается мостом Strimzi. На самом деле протокол AMQP 1.0, который находится в мосте (как POC), может поддерживать такой сценарий, поэтому при установлении соединения и подключении моста по этому соединению вместо опроса со стороны клиента.

...