我有一个用例,其中必须收集用户事件并将其存储在Kafka中。在移动应用程序和网站中直接使用Kafka客户端直接向Kafka而不是中间层发送消息是否有效。 Kafka是否设计为可以处理数百万个并发连接?
答案 0 :(得分:3)
从技术上讲,您可以做到。人们不这样做的主要原因(尤其是对于移动应用程序而言)是,要维持该产品的长期发展,控制其安全性甚至是规模都将是困难的。
在过去的几年中,Kafka Clients API发生了巨大的发展(虽然最好,但这仍然是一个变化)。它还包括授权和身份验证机制,但是您对它们的处理方式没有太多的自由。 Kafka并不是建立在像JMS这样的标准化协议和与技术无关的规范上的,而JMS可以被认为更加灵活。
与大多数现有技术一样,在主要版本之间,也不保证兼容性。您可能需要长时间保留多个服务器版本,只是因为某些移动客户端仍然过时并且与特定的客户端版本耦合,而其本身又与特定的服务器版本耦合。
出于同样的原因,另一方面,您可能还需要长时间保持处理消息模式的旧版本,只是为了使老客户满意。
那是HTTP(更具体地说是API gateway pattern)到位的时候。
HTTP API更易于限制,执行速率限制,应用自定义安全策略,自定义身份验证/授权策略等。它们基于Internet上使用的标准协议。
当您计划使用后端平台进行一些合作伙伴集成时,使用HTTP也有很多优势。因为他们可以轻松做到这一点,而无需更改技术堆栈。
通过不将Kafka暴露给外部客户端,您可以稍后更改基础技术堆栈,而不会影响客户端。老实说,尽管Kafka是一项出色的技术,但很难与HTTP竞争互联网通信。 Kafka实际上提供了REST Proxy,这是一个基于HTTP的客户端,可能被认为可用于此类事情。