我们有一个相当严格的网络细分政策。我正在使用云代工实例来部署应用程序。已设置防火墙规则以从云代工厂实例中到达kafka群集。我相信防火墙规则也已设置为访问zookeeper实例。我需要确实确认一个。
我的问题似乎是我可以向kafka发送消息,但我的消费者似乎并没有接受它们。它似乎在“投票”时挂起。
我的防火墙规则是否需要处理一些隐藏的主机或端口,而这些规则不仅仅是kafka和zookeeper节点的标准主机和端口?
答案 0 :(得分:13)
卡夫卡和动物园管理员是不同的事情。如果您在同一台计算机上运行,则需要打开两个corse端口。
kafka默认端口:
zookeeper默认端口:
就是这样。
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后客户,我能够从公共互联网上提取信息。