我可以通过互联网使用kafka吗?

nty*_*sdd 2 authentication cluster-computing nat wan apache-kafka

kafka是否适合互联网使用?

更准确地说,我想要将kafka主题公开为“公共接口”,然后外部使用者(或生产者)可以连接到它。可能吗?

如果我想同时在内部和外部网络中使用群集,我会听到一些问题,因为这样很难配置advertised.host.name。真的吗?

我还必须暴露动物园管理员吗?我认为新的消费者/生产者api不再需要它。

Han*_*sen 7

Kafka 的有线协议是基于 TCP 的,在公共互联网上运行良好。在最新版本的 Kafka 中,您可以为内部和外部流量配置多个接口。生产中互联网上 Kafka 的示例包括来自 Heroku、IBM MessageHub 和 Confluent Cloud 的几个 Kafka 即服务产品。

如果 Kafka 客户端使用新的消费者 API,则不需要公开 zookeeper。

您还可以选择将 REST 代理(例如开源 Confluent REST 代理)公开为对客户端防火墙更友好的界面,因为它通过 HTTP(S) 运行并且不会被大多数公司或个人防火墙阻止。


Mar*_*tti 6

由于这些原因,我个人不会通过TCP直接将Kafka服务器公开给客户端,仅举几个例子:

  • 如果不良客户端打开了太多连接,这可能会影响Kafka平台的稳定性,也可能会影响其他客户端
    • Kafka服务器上打开的文件太多,需要进行硬件/软件设置和操作系统调整,以限制不受控制的客户端
  • 如果您需要添加Kafka服务器以增加可伸缩性,则可能需要在客户端和服务器端都进行许多低级配置(防火墙,IP可见性,证书等)。其他产品使用网关或代理解决了这些问题:Coherence使用扩展代理客户端,tibco EMS使用路由的目的地,其他SW(许多JMS服务器)使用Store&Forward机制,等等。
  • 如果客户端连接到Kafka服务器,则对Kafka节点的维护还必须考虑客户端的需求以及与客户端定义的SLA(服务级别协议)(例如24 * 7 * 365)
  • 如果还将Kafka用作后端服务,则应考虑多层体系结构:FE网关和BE服务等。
  • 其他注意事项还需要了解您认为系统中到底是哪个外部(通过Internet)消费者/生产者。它是系统中需要访问Kafka服务器的组件吗?它们在您的组织内部还是外部等?

当然,所有这些注意事项也可以使用与Kafka服务器的TCP直接连接来正确解决,但是我个人会使用其他解决方案。

  • HTTP代理
  • 或者至少我会使用专用于每个客户端的专用FE Kafka服务器(或HA的几个服务器),将消息转发到主要的Kafka服务器组


Emi*_*nov 5

可以通过互联网公开 Kafka(事实上,这就是 Aiven 和 Instaclustr 等托管 Kafka 提供商赚钱的方式),但您必须确保它得到充分的保护。至少:

  • ZooKeeper 节点应驻留在私有子网中,并且不能从外部路由。ZK 的安全性不够,无论如何,不​​再需要使用 ZK 地址引导 Kafka 客户端。
  • 在网络级别限制对代理的访问。如果所有客户端都从受信任的网络连接,则设置适当的防火墙规则。如果在 AWS 中,如果您要连接云到云或云到地,请使用 VPC 对等或 Direct Connect。如果您的大多数客户端位于受信任的网络上,但相对少数客户端不在受信任的网络上,请强制后者通过 VPN 隧道。最后,如果您想允许来自任意位置的连接,您只需使用allow *端口 9092(或您配置代理侦听的任何端口)即可;只需确保其他端口已关闭即可。
  • 为客户端代理连接启用 TLS (SSL)。这可以通过自签名 CA 轻松配置。根据您公开侦听器的方式,您可能需要在客户端上禁用 SSL 主机名验证。(如果公布的主机名与证书的公用名不匹配,证书信任链就会中断。)客户端将需要安装 CA 证书。(签署经纪人证书的同一 CA。)
  • (可选)您可以启用双向 TLS 身份验证;然而,这在逻辑上更加繁重,因为它要求每个客户都有自己的私钥,并由经纪人信任的 CA 签名。
  • 使用 SASL 向代理验证客户端的身份,并为每个应用程序和每个预期访问集群的人员创建单独的用户。
  • 遵循最小权限原则 (PoLP),在 ACL 中为每个用户颁发最低限度足够的集群级和主题级访问权限。

另一件需要记住的事情是:并非所有工具都支持 SASL/SSL 连接,有些工具实际上需要连接到 ZooKeeper 节点(在上述设置中无法访问)。确保您依赖的任何工具都使用直接与 Kafka 代理的“新”连接方式,并且不需要 Zookeeper 连接。