乐趣区

关于apisix:代理类型升级APISIX-支持-Kafka-作为上游

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 协定作为通信协议,通过便捷的编译过程,使其后续可在多种语言的程序中应用。在过程中,次要通过 ListOffsets 命令来获取偏移量,通过 Fetch 命令来获取音讯。

除此之外,因为 Kafka 消费者的性能是基于 APISIX 的 PubSub 框架,所以你也能够基于该框架扩大其余音讯零碎,实现更丰盛的公布订阅能力。

如何应用

设置 Kafka 路由

APISIX 增加了一种新的上游 Scheme 类型,除反对 HTTP、GRPC 等协定外,当初也反对了 Kafka。在操作过程中,只需将 scheme 字段值设置为 kafkanodes 字段中设置为 Kafka Broker 的地址与端口,即可开启 APISIX 的 Kafka 公布订阅反对。

curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/kafka' \
    -H 'X-API-KEY: ${api-key}' \
    -H 'Content-Type: application/json' \
    -d '{"uri":"/kafka","upstream": {"nodes": {"kafka-server:9092": 1},
        "type": "none",
        "scheme": "kafka"
    }
}'

(可选)设置 TLS 握手

当 Kafka 上游的 tls 字段存在时,APISIX 会为该连贯开启 TLS 握手,同时 tls 中还有一个 verify 字段,你能够通过它管制 TLS 握手时是否校验服务器证书。

curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/kafka' \
    -H 'X-API-KEY: ${api-key}' \
    -H 'Content-Type: application/json' \
    -d '{"uri":"/kafka","upstream": {"nodes": {"kafka-server:9092": 1},
        "type": "none",
        "scheme": "kafka",
        "tls": {"verify": true}
    }
}'

(可选)设置 SASL/PLAIN 认证

为了反对认证性能,APISIX 中还提供了 kafka-proxy 插件,用户能够通过它为 Kafka 的路由配置 SASL 认证性能,以后它仅反对 PLAIN 模式的认证。

curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/kafka' \
    -H 'X-API-KEY: ${api-key}' \
    -H 'Content-Type: application/json' \
    -d '{"uri":"/kafka","plugins": {"kafka-proxy": {"sasl": {"username":"user","password":"pwd"}
        }
    },
    "upstream": {
        "nodes": {"kafka-server:9092": 1},
        "type": "none",
        "scheme": "kafka"
    }
}'

设置客户端及测试

你能够从 Apache APISIX 的 GitHub 仓库中获取 PubSub 的协定定义,这其中蕴含 Kafka 的命令与响应,须要将它编译成所需语言的 SDK。

之后便可通过客户端(如浏览器)以 WebSocket 连贯之前设置的 Kafka 路由 URI ws://127.0.0.1:9080/kafka,向其发送 PubSubReq 数据。这其中蕴含须要应用的命令,APISIX 将从 Kafka 中获取数据,并向客户端发送 PubSubResp 响应数据。

如应用结束,只须要移除路由即可敞开该端点的 Kafka 性能。得益于 APISIX 动态化个性,无需重启即可实现状态更新。

总结

对于 Kafka 公布订阅性能的更多阐明和残缺配置列表,你能够参考下方链接:

  • Kafka 公布订阅性能:https://apisix.apache.org/zh/…
  • kafka-proxy 插件:https://apisix.apache.org/zh/…

目前,Apache APISIX 也在进行其余音讯零碎的公布订阅能力反对,如果你对此感兴趣,也欢送浏览公布订阅(PubSub)模块的开发文档 https://apisix.apache.org/zh/…。

如果你有任何想法,也能够在 GitHub Discussion 中发动探讨,或通过社区邮件列表进行交换。

退出移动版