我很好奇Confluence的Kafka REST Proxy和用kafka官方客户端库实现的生产者/消费者的优缺点。 我知道 Confluence 的 Kafka REST 代理用于管理任务和 kafka 客户端不支持的语言。
那么,kafka客户端有哪些优势呢?
本机客户端的一个优势是通过直接 TCP 到代理的原始性能,而不是在 REST 代理内进行往返 HTTP 序列化 + JVM 序列化。
上述方法的一个缺点可能是用各种语言为所有客户维护安全策略;否则任何人都可以产生和消费任何人的其他主题。如果您没有多租户 Kafka 集群,也许这不是一个因素。与 REST 代理相比,只有一个 SSL 证书,但在主题上拥有 ACL 可能仍然是一个好主意。
REST 代理的明显优势是,任何 HTTP 客户端都有一个标准接口可以进行交易。除了代理本身支持的内容之外,无需区分客户端中的 Kafka 版本或支持的 API。但随着时间的推移,随着客户的开发,这种需求将变得越来越少。
另外,您之前的问题Kafka REST Proxy API 有什么好处?
使用 REST 代理,可以更轻松地运行管理任务,而无需使用较低级别的 Kafka 协议。例如,您可以执行查看集群状态等操作。 它基本上允许您以更简单的方式做与较低级别相同的事情。
有些架构不太适合 Kafka 协议的异步特性。如果客户端是 Web 应用程序,它将不具备直接连接到 Kafka 集群所需的传输层控制。如果客户端是基于 AWS Lambda 或 Azure Functions 等函数即服务技术构建的,则在启动时创建与集群的连接的开销以及等待集群接受传出消息的要求将非常低效且成本高昂。在这些情况下,某种形式的代理确实是必要的。
如果正确使用,Kafka 客户端和协议可以在弹性方面提供一些出色的功能(在后台重试以确保即使出现短期连接问题也能传递消息;与多个节点通信并确保每条消息被足够多的节点接受) )和性能(排队和批处理消息;直接使用 TCP;更高效的数据序列化;跳过中间人),如果您处于类似服务器的环境中,直接使用 Kafka 客户端通常是一个好主意具有较长生命周期的环境和具有良好 Kafka 客户端实现的技术可供您使用。
此外,REST 代理仅支持生产,因此如果您需要使用任何内容,则需要使用 Kafka 客户端。
Confluence 也一直在推动 Confluence Cloud 的发展,目前 Confluence Cloud 不包括 REST Proxy(尽管他们的销售人员可能会这么说)。因此,如果您将自己与 Confluence Platform 中的 REST 代理实现联系起来,您可能会发现您需要开始管理自己的实例。