我在azure有一个vm(linux操作系统),上面有hortonworks,它启动了kafka。
kafka服务正在运行,我可以在vm中创建生产者和消费者。
我有服务器的ip,我也可以登录到ambari使用8080端口。
当我试图从我的java应用程序向kafka发送消息时,60秒后我收到一个timouteexception。
我需要做些什么才能为来自vm外部的kafka通信设置正确的端口?
我认为这里的主要问题是,kafka监听的是本地ip而不是vmip(wan)。
任何帮助都将不胜感激。。。
3条答案
按热度按时间5lwkijsr1#
(将我的回复复制粘贴到类似的帖子上)
对于kafka的最新版本(本文中的0.10.0),您不想使用
advertised.host.name
完全。事实上,就连[文件]都说advertised.host.name
已弃用。此外,Kafka不仅会将此作为生产者/消费者的“广告”主机名,也会将其作为其他代理的主机名(在多代理环境中)……如果您对代理使用不同的(可能是内部的)dns,那么这是一种痛苦……而且您真的不想从事向个人添加条目的业务/etc/hosts
经纪人的名字(呃!)因此,基本上,您希望代理使用内部名称,但仅对生产者和消费者使用外部FQDN。为此,您将更新
advertised.listeners
相反。xtfmy6hx2#
是否设置了kafka advised.host.name和advised.port环境变量?这就是你向外界展示自己的方式。
l2osamch3#
如果您已使用azure资源管理器工作流创建虚拟机,则您拥有一个已自动创建的网络安全组。您需要在nsg中创建规则,以使Kafka可用。请参见:https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-nsg/
如果您使用了azureclassic部署工作流,则需要定义一个端点来公开kafka。请参见:https://azure.microsoft.com/fr-fr/documentation/articles/virtual-machines-windows-classic-setup-endpoints/
希望这有帮助,
朱利安