Apache Kafka 是一个开源流处理平台,是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据,其所有功能都是以分布式、高度可扩展、弹性、容错和安全的方式提供的。
在 Apache APISIX 2.14 版本中发布了一个新功能,即提供 Kafka 类型的上游,用户可以通过在路由中配置 scheme
为 Kafka 的上游开启 Kafka 消费者功能,从而在各种环境中实现消息订阅。
本文将介绍 Kafka 发布订阅功能及 kafka-proxy
插件的使用细节,为大家呈现如何将 APISIX 与 Kafka 结合使用在浏览器等连接受限的场景,实现对 Kafka 中消息的消费。
原理
Kafka 使用自定义的 TCP 协议实现 Broker 与消费者之间的通信。在 Apache APISIX 中,你可以通过四层代理实现这部分的代理,但对于终端用户(如浏览器等)与 Broker 通信这种无法直接使用 TCP 连接的场景,则没有办法进行很好的支持。
而现在,客户端可通过 WebSocket 连接到 APISIX,在 APISIX 内部建立与 Kafka 的连接,进而处理客户端的命令(如获取偏移量、获取消息等)。通过 WebSocket 的连接,可以避免在浏览器这种无法直接使用 TCP 连接的场景中从 Kafka 中拉取消息。
通过上述流程图可以看到,这里内部使用自定义的 Protobuf 协议作为通信协议,通过便捷的编译