Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Websocket 如何使用Strimzi Kafka Bridge作为流媒体服务_Websocket_Apache Kafka_Strimzi - Fatal编程技术网

Websocket 如何使用Strimzi Kafka Bridge作为流媒体服务

Websocket 如何使用Strimzi Kafka Bridge作为流媒体服务,websocket,apache-kafka,strimzi,Websocket,Apache Kafka,Strimzi,使用CNCF的Strimzi-Kafka桥,我创建了一个小API,可以使用HTTP/1.1协议与Kafka服务器交互。这对于请求-响应场景来说都很好。然而,根据我的理解,我的要求是在收到卡夫卡主题上接收到的事件后,尽快通过Strimzi桥将它们流式传输到订阅的客户端,最好是通过长寿命HTTP连接。连续轮询桥接器以获取消息,然后空手而归,这是对客户端资源的浪费。我希望Kafka服务器将这些事件直接流式传输到客户端 我对SSE、WebSocket或长轮询有点不确定。我读了很多关于将数据流传输到客户机

使用CNCF的Strimzi-Kafka桥,我创建了一个小API,可以使用HTTP/1.1协议与Kafka服务器交互。这对于请求-响应场景来说都很好。然而,根据我的理解,我的要求是在收到卡夫卡主题上接收到的事件后,尽快通过Strimzi桥将它们流式传输到订阅的客户端,最好是通过长寿命HTTP连接。连续轮询桥接器以获取消息,然后空手而归,这是对客户端资源的浪费。我希望Kafka服务器将这些事件直接流式传输到客户端

我对SSE、WebSocket或长轮询有点不确定。我读了很多关于将数据流传输到客户机的方法。但是,我无法确定这些更改是在通信层还是在应用层,或者两者都在

您是否只是构建了一个API,而不考虑使用传统HTTP通信协议的技术,并以某种方式将其升级为使用WebSocket,或者WebSocket的使用应该完全嵌入到您的应用程序库中


如果需要,我可以提供更多信息。Strimzi-Kafka网桥网站没有提及任何关于服务器端流媒体的内容,或者我可能误解了该工具的真正用途。

Strimzi-Kafka HTTP网桥是HTTP到Kafka本机协议的翻译器,反之亦然。这意味着HTTP客户端必须具有与本机Kafka客户端相同的行为,因此,在消费者的情况下,进行轮询以获取消息,这就是Kafka本机的工作方式。Imho HTTP 1.1根本不适用于流式传输。 Websockets是一种完全不同的协议,您当然可以从HTTP连接开始升级到它,但Strimzi网桥不支持它。
实际上,网桥中作为POC的AMQP 1.0协议可以支持这种情况,因此建立连接并让网桥推送该连接,而不是从客户端轮询。

Strimzi-Kafka HTTP网桥是HTTP到Kafka本机协议的转换器,反之亦然。这意味着HTTP客户端必须具有与本机Kafka客户端相同的行为,因此,在消费者的情况下,进行轮询以获取消息,这就是Kafka本机的工作方式。Imho HTTP 1.1根本不适用于流式传输。 Websockets是一种完全不同的协议,您当然可以从HTTP连接开始升级到它,但Strimzi网桥不支持它。
实际上,作为POC的网桥中的AMQP 1.0协议可以支持这种情况,因此建立连接并让网桥推送该连接,而不是从客户端进行轮询。

@Nick进一步思考,实际上您可以进行长时间轮询。用于获取消息的/records端点上的GET在查询字符串上有一个timeout参数。其值用作桥接器中内部本机Kafka轮询的超时。它以某种方式为您提供了长轮询行为,因为直到有可用记录或超时过期,轮询才会返回。如果设置了高超时,则可以通过打开/关闭更多HTTP连接来避免轮询更多次数。 有关超时参数的更多详细信息,请参见此处:


@尼克想得更多,其实你可以做长时间的投票。用于获取消息的/records端点上的GET在查询字符串上有一个timeout参数。其值用作桥接器中内部本机Kafka轮询的超时。它以某种方式为您提供了长轮询行为,因为直到有可用记录或超时过期,轮询才会返回。如果设置了高超时,则可以通过打开/关闭更多HTTP连接来避免轮询更多次数。 有关超时参数的更多详细信息,请参见此处:


对于你的评论,我有一个非常笼统的问题。在推送架构的情况下,Kafka服务器将事件推送到客户端,允许客户端通过他订阅的主题的Kafka偏移量上的API控件是否有意义?。推送体系结构更像是从客户机的角度看的“读”还是“丢”的过程。在这种情况下,服务器如何管理断开连接的客户端?或者服务器真的应该关心这种体系结构模式吗。我对推拉模式有很大分歧。对于pjll来说,斯特里姆齐很好。对于推送,图钉代理很好。最佳做法是什么Kafka服务器正在将事件推送到客户端。。。没有意义,因为卡夫卡不是为了推动而是为了投票。AMQP协议允许轻松执行推送,网桥根据消息的AMQP客户端ack负责提交或不提交偏移量。在AMQP中,还存在基于流量控制信用的概念,其中接收方向发送方提供信用,如果发送方能够在桥接器的情况下接收消息,则无信用意味着停止桥接器上的卡夫卡消费者。推挽

在用例上结束。足够公平。Kafka服务器将事件推送到客户端是对接收者得到的信息的一种印象,而不必担心用于实现该状态的中间技术。即使在pull架构中,我也试图弄清楚接收方如何在不过早关闭HTTP连接的情况下接收有关主题的所有消息。我需要看得更深入一点。实际上,这可能是一个功能,可以添加到桥上,或者更多地考虑它。。。支持HTTP长轮询。当前,当客户端发送HTTP请求进行轮询时,即使没有可用记录,网桥也会返回响应。也许网桥可以避免在记录可用或超时过期之前发送响应,它可以是可配置的。这将是一个很好的添加功能。谢谢大家的讨论。我有一个很一般的问题要问你。在推送架构的情况下,Kafka服务器将事件推送到客户端,允许客户端通过他订阅的主题的Kafka偏移量上的API控件是否有意义?。推送体系结构更像是从客户机的角度看的“读”还是“丢”的过程。在这种情况下,服务器如何管理断开连接的客户端?或者服务器真的应该关心这种体系结构模式吗。我对推拉模式有很大分歧。对于pjll来说,斯特里姆齐很好。对于推送,图钉代理很好。最佳做法是什么Kafka服务器正在将事件推送到客户端。。。没有意义,因为卡夫卡不是为了推动而是为了投票。AMQP协议允许轻松执行推送,网桥根据消息的AMQP客户端ack负责提交或不提交偏移量。在AMQP中,还存在基于流量控制信用的概念,其中接收方向发送方提供信用,如果发送方能够在桥接器的情况下接收消息,则无信用意味着停止桥接器上的卡夫卡消费者。推还是拉取决于用例。足够公平了。Kafka服务器将事件推送到客户端是对接收者得到的信息的一种印象,而不必担心用于实现该状态的中间技术。即使在pull架构中,我也试图弄清楚接收方如何在不过早关闭HTTP连接的情况下接收有关主题的所有消息。我需要看得更深入一点。实际上,这可能是一个功能,可以添加到桥上,或者更多地考虑它。。。支持HTTP长轮询。当前,当客户端发送HTTP请求进行轮询时,即使没有可用记录,网桥也会返回响应。也许网桥可以避免在记录可用或超时过期之前发送响应,它可以是可配置的。这将是一个很好的添加功能。谢谢大家的讨论,太好了。将给出一个tryI尝试在使用者实例订阅期间根据整型数据类型将consumer.request.timeout.ms设置为允许的最大值。在订阅期间,我试图发布关于卡夫卡主题的消息。如果不重新发送GET请求,我无法通过网桥使用消息。如果不重新发送GET请求,长轮询将无法工作。在这种情况下,我对长轮询的理解正确吗?@Nick这很奇怪,我刚刚尝试了它,它奏效了。启动网桥,使用邮递员创建一个消费者,订阅开始时为空的测试主题,并在此URL上使用GET调用轮询,以便指定60秒作为超时。请求被卡住了,直到10秒后我向该主题发送了一条消息。它将解锁投票,并将记录返回给消费者。感谢您的测试。我会再试一次。我还用邮递员订阅。我将重新测试和验证。谢谢你在这方面的帮助。关于这座桥,我还有几个问题要问。它是否必须进行集装箱化生产,或者我可以在虚拟机上使用它?是否有用于连接到安全Kafka群集的文档化设置?你有没有试过在前面放一个负载平衡器?它的伸缩性好吗?我可能还需要某种API网关来处理这个问题。例如Apigee或第7层。非常感谢您的回复和所有的帮助。这座桥甚至可以在虚拟机上运行,所以不是集装箱化的,也不是在Kubernetes上。为了连接到安全群集,您只需使用application.properties文件为producer和consumer添加Kafka配置参数,以便信任存储(如果TLS、身份验证等)。您必须设置以前缀Kafka.producer和Kafka.consumer开头的参数。最后,关于消费者方面的工作原理,扩展桥梁并不简单,但我与3scale API进行了集成,您可以在这里找到:太棒了。将给出一个tryI尝试在使用者实例订阅期间根据整型数据类型将consumer.request.timeout.ms设置为允许的最大值。在订阅期间,我试图发布关于卡夫卡主题的消息。我无法在不重新发送消息的情况下通过网桥使用消息
获取请求。如果不重新发送GET请求,长轮询将无法工作。在这种情况下,我对长轮询的理解正确吗?@Nick这很奇怪,我刚刚尝试了它,它奏效了。启动网桥,使用邮递员创建一个消费者,订阅开始时为空的测试主题,并在此URL上使用GET调用轮询,以便指定60秒作为超时。请求被卡住了,直到10秒后我向该主题发送了一条消息。它将解锁投票,并将记录返回给消费者。感谢您的测试。我会再试一次。我还用邮递员订阅。我将重新测试和验证。谢谢你在这方面的帮助。关于这座桥,我还有几个问题要问。它是否必须进行集装箱化生产,或者我可以在虚拟机上使用它?是否有用于连接到安全Kafka群集的文档化设置?你有没有试过在前面放一个负载平衡器?它的伸缩性好吗?我可能还需要某种API网关来处理这个问题。例如Apigee或第7层。非常感谢您的回复和所有的帮助。这座桥甚至可以在虚拟机上运行,所以不是集装箱化的,也不是在Kubernetes上。为了连接到安全群集,您只需使用application.properties文件为producer和consumer添加Kafka配置参数,以便信任存储(如果TLS、身份验证等)。您必须设置以前缀Kafka.producer和Kafka.consumer开头的参数。最后,关于用户端的工作原理,扩展桥接器并不简单,但我与3scale API进行了集成,您可以在这里找到: