Apache Kafka的原生二进制TCP协议对它的restful API有什么好处?

时间:2017-09-24 16:32:05

标签: apache-kafka

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

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

1 个答案:

答案 0 :(得分:2)

Apache Kafka中没有用于生成或使用消息的REST API,就像用Java实现的本机Kafka协议客户端一样。

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

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

如果您想询问使用本机Kafka Java Producer / Consumer API而不是这些第三方REST / HTTP代理实现有什么好处,那么这些是一些原因:

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

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

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

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

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

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