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服务器的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代理是一个真正的选择。