Authentication 我可以通过互联网使用卡夫卡吗?

Authentication 我可以通过互联网使用卡夫卡吗?,authentication,apache-kafka,cluster-computing,nat,wan,Authentication,Apache Kafka,Cluster Computing,Nat,Wan,卡夫卡适合互联网使用吗 更准确地说,我想要的是将卡夫卡主题公开为“公共接口”,然后外部消费者(或制作人)可以连接到它。可能吗 我听说如果我想在内部和外部网络中使用群集,会出现问题,因为这样很难配置adverted.host.name。这是真的吗 我也要暴露动物园管理员吗?我认为新的消费者/生产者api不再需要它。卡夫卡的有线协议是基于TCP的,在公共互联网上运行良好。在最新版本的Kafka中,您可以为内部和外部流量配置多个接口。互联网上的卡夫卡产品示例包括Heroku、IBM MessageHu

卡夫卡适合互联网使用吗

更准确地说,我想要的是将卡夫卡主题公开为“公共接口”,然后外部消费者(或制作人)可以连接到它。可能吗

我听说如果我想在内部和外部网络中使用群集,会出现问题,因为这样很难配置adverted.host.name。这是真的吗


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

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

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


您也可以选择将REST代理(如开源Confluent REST Proxy)公开为更为客户端防火墙友好的接口,因为它运行在HTTP上,不会被大多数公司或个人防火墙阻止。

除了配置客户端TLS之外,代理还必须具有我们试图避免的公共IP。通常,对于其他服务,我们将所有内容隐藏在负载平衡器后面。卡夫卡能做到这一点吗


当您需要java producer客户端的高性能批处理时,我不确定托管在公共服务器上的Confluent REST代理是否是一个真正的选择。

我个人不会通过TCP将Kafka服务器直接暴露给客户端,原因如下:

  • 如果一个坏客户端打开了太多的连接,这可能会影响Kafka平台的稳定性,也可能会影响其他客户端
    • Kafka服务器上打开的文件太多,需要硬件/软件设置和操作系统调整来限制不受控制的客户端
  • 如果您需要添加Kafka服务器以提高可伸缩性,则可能需要在客户端和服务器端进行大量低级别配置(防火墙、IPs可见性、证书等)。其他产品使用网关或代理解决这些问题:Coherence使用扩展代理客户端,tibco EMS使用路由目的地,其他SW(许多JMS服务器)使用存储转发机制,等等
  • 卡夫卡节点的维护,在连接到卡夫卡服务器的客户端的情况下,还必须考虑客户机的需求和客户机定义的SLA(服务级别聚合)(24×7×365)
  • 如果您还将Kafka用作后端服务,则应考虑多层体系结构:FE网关和be服务等
  • 其他的考虑需要了解你在系统中认为是什么样的外部(互联网上的)消费者/生产者。它是需要访问Kafka服务器的系统组件吗?它们是组织内部的还是外部的,等等。
当然,也可以使用到Kafka服务器的TCP直接连接正确地解决所有这些问题,但我个人会使用不同的解决方案

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

可以通过互联网公开卡夫卡(事实上,这就是管理卡夫卡提供商(如Aiven和Instaclustr)赚钱的方式),但您必须确保它有足够的安全性。至少:

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

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

我看到了这一点。不确定它是否相关但前面有一个django/flask rest api。AFAIK您不能将kafka群集隐藏在负载平衡器后面,因为每个生产者必须直接连接到特定的代理,该代理是生产者需要写入的分区的负责人。更正@guido,您必须