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



kafka适合Internet使用?

更确切地说,我想要的是将Kafka主题视为"公共接口",然后外部消费者(或生产者)可以连接到它。有可能吗?

我听说如果我想在内部和外部网络中使用群集,那会有问题,因为然后很难配置advertioned.host.name。是真的吗?

我还必须揭露Zookeeper吗?我认为新的消费者/生产者API不再需要。

kafka的电线协议基于TCP,并且可以在公共互联网上运行良好。在KAFKA的最新版本中,您可以为内部和外部流量配置多个接口。生产中互联网上的Kafka的示例包括Heroku,IBM MessageHub和Confluent Cloud的几个Kafka-As-A-Service产品。

如果Kafka客户使用新的消费者API,则不需要暴露Zookeeper。

您也可以选择揭露诸如开源汇合的REST代理之类的休息代理,因为它可以通过HTTP运行,并且不会被大多数公司或个人防火墙所阻止。

出于这些原因,我个人不会直接通过TCP曝光Kafka Server,仅举几例:

  • 如果不好的客户打开了太多的连接,这可能会影响Kafka平台的稳定性,并且可能会影响其他客户
    • 需要在KAFKA服务器上,HW/SW设置和操作系统调整上限制不受控制的客户端
    • 需要太多的打开文件
  • 如果您需要添加KAFKA服务器以提高可扩展性,则可能需要在客户端和服务器端进行大量低级配置(防火墙,IPS可见性,证书等)。其他产品使用网关或代理解决这些问题:连贯使用扩展代理客户端,TIBCO EMS使用路由目的地,其他SW(许多JMS服务器)使用商店& forward机构等。
  • 在Kafka服务器附加客户的情况下,维护Kafka节点的维护将必须还必须考虑客户端定义的客户的需求和SLA(服务级别的凝聚)(Ex。24*7**)365)
  • 如果您也将Kafka还用作后端服务,则应考虑多层体系结构:FE网关和服务等。
  • 其他考虑因素需要了解系统中您认为是外部(通过Internet)的外部(通过Internet上)。是您需要访问KAFKA服务器的系统的组件吗?它们是您组织的内部还是外部?...
  • 自然可以使用与KAFKA服务器的TCP直接连接正确解决所有这些注意事项,但是我个人会使用其他解决方案。

    • http Proxies
    • 或至少我将使用专用的Fe Kafka服务器(或用于HA的几个服务器),专用于每个客户端,将消息转发到主服务器的主要Kafka组

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

    • Zookeeper节点应驻留在私人子网中,而不是外部路线。ZK的安全性不足,无论如何,不再需要使用ZK地址的Kafka客户端。
    • 限制在网络级别上访问经纪人。如果您的所有客户都通过受信任的网络连接,则设置适当的防火墙规则。如果在AWS中,请使用VPC对等或直接连接如果您连接云到云或云到地面。如果您的大多数客户都在受信任的网络上,但相对少数群体不在,请迫使后者通过VPN隧道进行。最后,如果要允许从任意位置进行连接,则只需在端口9092上进行allow *(或您配置经纪人要侦听的任何端口);只需确保其他端口关闭即可。
    • 启用tls(ssl)用于客户端传播连接。这很容易用自签名的CA配置。根据您如何暴露听众的方式,您可能需要在客户端上禁用SSL主机名验证。(如果广告主机名称与证书的通用名称不匹配,则信任链会断路。)客户将需要安装CA证书。(同一CA签署了经纪人证书。)
    • 可选,您可以启用相互tls身份验证;但是,这在逻辑上更加征税,因为它要求每个客户具有由经纪人信任的CA签名的自己的私钥。
    • 使用SASL来验证客户对经纪人的身份验证,并为每个应用程序以及每个期望访问群集的人创建单个用户。
    • 遵循最小特权的原则(POLP)。

    要牢记的另一件事是:并非所有工具都支持SASL/SSL连接性,而某些工具实际上需要与Zookeeper节点进行连接(在上述设置中无法实现)。确保您依靠的任何工具都会直接使用"新"连接性直接到Kafka经纪人,并且不需要Zookeeper连接。

    除了配置客户端以外TLS,经纪人必须拥有我们试图避免的公共IP。通常,对于其他服务,我们将所有内容都隐藏在负载平衡器后面。卡夫卡可能会有可能吗?

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

    最新更新