Kafka和防火墙规则

时间:2016-07-22 16:11:11

标签: apache-kafka kafka-consumer-api

我们有一个相当严格的网络细分政策。我正在使用云代工实例来部署应用程序。已设置防火墙规则以从云代工厂实例中到达kafka群集。我相信防火墙规则也已设置为访问zookeeper实例。我需要确实确认一个。

我的问题似乎是我可以向kafka发送消息,但我的消费者似乎并没有接受它们。它似乎在“投票”时挂起。

我的防火墙规则是否需要处理一些隐藏的主机或端口,而这些规则不仅仅是kafka和zookeeper节点的标准主机和端口?

2 个答案:

答案 0 :(得分:13)

卡夫卡和动物园管理员是不同的事情。如果您在同一台计算机上运行,​​则需要打开两个corse端口。

kafka默认端口:

  • 9092,可以在server.properties上更改;

zookeeper默认端口:

  • 2181用于客户端连接;
  • 2888 for follower(其他zookeeper节点)连接;
  • 3888用于节点间连接;

就是这样。

Kafka,还有 侦听器 advertised.listeners 属性,这些属性会对第一批用户造成一些混淆。为简化起见, listener 是服务器将绑定的网络接口, advertised.listeners 是您的服务器将在zookeeper上注册并侦听请求的主机名或IP。如果您在其中放置主机名,则客户端必须使用主机名进行连接。 advertised.listeners url是您的客户端将用于引导连接的URL。建立连接后,您的客户端将获得与zookeeper的连接以获取其他经纪人网址。你的制作人因此没有工作。

所以,要使它工作,你需要在你的防火墙上打开2888,而不仅仅是2181.而@Jaya Ananthram在他告诉你kafka需要2181端口时错了。这是一个动物园管理员港口。 kafka 0.10剧照的消费者需要联系zookeeper来坚持一些事情,就是这样。

Kafka 0.11.0.0改变了这一点,并且让客户根本不需要动物园管理员。

答案 1 :(得分:3)

TL; DR :没有隐藏的端口。检查您的代理配置。确保它公布了Kafka消费者可以访问的IP / PORT。

在遇到Kafka 0.10.1.1与kafka-python库作为消费者的问题后,我遇到了这个问题。

没有。我捕获了网络流量,它没有使用任何其他端口与Kafka通信。如果代理配置为使用9092,它将是消费者使用的唯一端口。

但经过进一步调查,经纪人配置在我的情况下是错误的。

  

kafka.advertised.listeners = PLAINTEXT:// [private_ip]:9092,SSL:// [public_ip]:9093   kafka.listeners = PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9093

我使用 [public_ip]:9092 作为引导服务器,因为我没有设置PKI,但我想从公共互联网上测试我的消费者。

消费者能够连接到经纪人,但无法提取任何消息。

由于消费者使用PLAINTEXT连接到Kafka,Kafka宣传了PLAINTEXT代理地址而不是SSL地址。然后,消费者尝试使用私有IP地址而不是公共IP地址来访问Kafka经纪人。 (原始网络捕获显示)

在经纪人中启用并配置PKI后客户,我能够从公共互联网上提取信息。