Apache Kafka 的原生二进制 TCP 协议相对于其 Restful API 有何优势?

Poi*_*rks 2 apache-kafka

根据 Apache Kafka 的文档,Kafka 在其本机 API 通信中使用二进制 TCP 协议,但他们还为不支持 Apache Kafka 本机 API 的语言提供基于 URL 的 Restful API。我只是想知道本机二进制 TCP 协议(​​本机 API 支持)相对于与代理节点的基于 Restful URL 的通信是否有任何好处?而且我也在想restful API还会维护only once属性吗?

编辑:restful API指南在这里: https: //www.confluence.io/blog/a-compressive-open-source-rest-proxy-for-kafka,它解释了如何通过restful API生成和使用Kafka的消息

Han*_*sen 6

Apache Kafka 中不包含用于生成或使用消息的 REST API(与用 Java 实现的本机 Kafka 协议客户端一样)。

\n\n

Apache Kafka 中有一个用于配置 Kafka Connect 的 REST API。

\n\n

有许多第三方 REST 代理实现(例如 Confluence Kafka REST 代理)允许通过 REST 接口进行发布/订阅,但这些是 Apache Kafka 之外的独立开源项目。

\n\n

如果您想问使用本机 Kafka Java 生产者/消费者 API 而不是这些第三方 REST/HTTP 代理实现有什么优势,那么这些是一些原因:

\n\n

好处之一是更高的并行性。Kafka 客户端通常会打开与集群中多个代理的 TCP 连接,并跨同一主题的多个分区并行发送或获取数据。

\n\n

另一个好处是更好的网络利用率,因为 HTTP 标头可以为原本较小的消息添加大量大小,而 Kafka\xe2\x80\x99s 有线协议是紧凑的二进制协议。

\n\n

Kafka 客户端自动处理负载平衡、故障转移和集群扩展或收缩,而 REST 客户端通常需要第三方负载平衡器来实现相同的功能。

\n\n

Kafka 客户端可以发送自己的身份验证凭据以进行访问控制和带宽限制(配额),而所有 REST 客户端都将 kafka 集群视为一个 Kafka 客户端,因此具有通用的 ACL 权限。

\n\n

Kafka 客户端库将消息一起缓冲和批处理为少量的 Kafka 生成或获取请求,而 HTTP 只能在程序员考虑将数据作为单个批次发布时才可以批处理数据。

\n\n

本机 Kafka 协议支持的不仅仅是生产者/消费者 API 公开的内容。还有一个用于创建主题和修改主题配置的管理 API。这些功能尚未通过最流行的 REST 代理实现公开。

\n