使用cncf的strimzi-kafka桥,我创建了一个小api,可以使用http/1.1协议与kafka服务器交互。这对于请求-响应场景来说都很好。但是,我的要求是,当我通过长寿命的http连接(据我所知)接收到kafka主题上接收到的事件时,立即(通过strimzi桥)将它们流式传输到订阅的客户端。连续地在桥上轮询消息,然后空手而归,这是对客户端资源的浪费。我想Kafka服务器流这些事件到客户端直接。
我对sse或websockets或长轮询有点不确定。我对这些方法做了大量的阅读,以便将数据流传输到客户机。但是,我无法确定这些更改是在通信层还是在应用层,或者两者兼而有之。
您是否只是使用传统的http通信协议构建一个api(不考虑技术),并以某种方式将其升级为使用websockets,或者websockets的使用应该嵌入到您的应用程序库中?
如果需要,我可以提供更多的信息。strimzi kafka bridge网站没有提到任何关于“服务器端流媒体”的内容,或许我误解了该工具的真正用途。
2条答案
按热度按时间2eafrhcq1#
strimzi-kafka http桥是http到kafka本机协议的“转换器”,反之亦然。这意味着http客户机必须具有与本地kafka客户机相同的行为,因此,在消费者的情况下,进行轮询以获取消息,这就是kafka本机的工作方式。IMHOHTTP1.1根本不支持流媒体。websockets是一个完全不同的协议,当然可以从http连接开始升级到它,但是strimzi桥不支持它。实际上,网桥中的amqp1.0协议(作为poc)可以支持这种情况,因此建立连接并让网桥推动该连接,而不是从客户端轮询。
jtw3ybtb2#
@尼克想得更多,其实你可以做“长时间投票”。用于获取消息的/records端点上的get具有
timeout
查询字符串上的参数。它的值用作网桥中内部本机kafka轮询的超时。它以某种方式为您提供了长轮询行为,因为轮询在有可用记录或超时过期之前不会返回。如果您设置了一个高超时,那么您就可以通过打开/关闭更多的http连接来避免轮询更多次。更多关于timeout
此处参数:https://strimzi.io/docs/bridge/latest/#_poll