从外部连接kafka的问题
Posted
技术标签:
【中文标题】从外部连接kafka的问题【英文标题】:Issue in connecting kafka from outside 【发布时间】:2015-03-20 07:14:54 【问题描述】:我正在为 kafka 服务器使用 hortonwork Sandbox 试图将 Eclipse 中的 kafka 与 java 代码连接起来。 使用此配置连接生产者发送消息
metadata.broker.list=sandbox.hortonworks.com:45000
serializer.class=kafka.serializer.DefaultEncoder
zk.connect=sandbox.hortonworks.com:2181
request.required.acks=0
producer.type=sync
其中 sandbox.hortonworks.com 是我连接的沙箱名称
在 kafka server.properties 我改变了这个配置
host.name=sandbox.hortonworks.com
advertised.host.name=System IP(on which my eclipse is running)
advertised.port=45000
端口也转发了,
我能够从 Eclipse 连接到 kafka 服务器,但是在发送消息时出现异常 异常“尝试 3 次后发送消息失败。”
【问题讨论】:
advertised.host.name 应该是运行 Kafka 的服务器本身的公共主机名或公共 IP,而不是运行 eclipse 的客户端的主机名,进一步您可以注释掉 host.name 以绑定服务器到所有接口。 如果我的 kafka 在 Unix 机器上运行,它是一个虚拟机,我的桌面同时托管虚拟机和 Eclipse。那么adverted.host.name可以是桌面IP地址还是不是请确认 您可以使用 hostname "XXXXX" 命令在虚拟框中设置主机名。完成后,您可以修改桌面中的主机文件以指向 XXXXX。虽然我没有机会在虚拟盒子中进行测试,但我想这会有意义 【参考方案1】:首先确保您已为您的 Hortonworks Sandbox VM 配置了仅主机网络,如下所述:
http://hortonworks.com/community/forums/topic/use-host-only-networking-for-the-virtual-machine/
完成此操作后,您的沙盒虚拟机应该获得一个 IP(例如 192.168.56.101),并且应该可以通过 SSH 从您的主机访问它
$ ssh root@192.168.56.101
然后在http://192.168.56.101:8080/打开Ambari并将Kafka配置更改为
listeners=PLAINTEXT://0.0.0.0:6667
advertised.listeners=PLAINTEXT://192.168.56.101:6667
后一个属性必须添加到“自定义 kafka-broker”部分中(另请参阅http://hortonworks.com/community/forums/topic/ambari-alerts-how-to-change-kafka-port/)。
然后通过 Ambari 启动/重启 Kafka。您现在应该能够从 Hortonworks Sandbox VM 外部访问 Kafka。您可以使用例如测试这个(从沙盒虚拟机外部)。 Kafka 发行版中的 Kafka 控制台生产者,例如
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
$ bin/kafka-console-producer.sh --topic test --broker-list 192.168.56.101:6667
【讨论】:
为了补充这个答案,在我的博文boristyukin.com/connecting-to-kafka-on-virtualbox-from-windows添加一个链接【参考方案2】:经过近一周的 config tweeking,我终于可以正常工作了。类似于 asmaier 的回答,但如果您使用像我这样的云服务器:Azure Sandbox-hdp,请尝试通过远程消费者/生产者发布/订阅。
天蓝色:
首先 SSH 进入你的天蓝色 在 Ambari Web-UI localhost:8080 中,添加
listeners=PLAINTEXT://0.0.0.0:6667
advertised.listeners=PLAINTEXT://127.0.0.1:6667
在终端@root,像hortonwroks指令页sandbox那样设置docker端口转发
vi start_scripts/start_sandbox.sh
在列表中添加端口 6667
在您的 PC 上:
首先 SSH 进入您的 azure plus 隧道 6667。
然后在 cmd: 中编写:或运行自己的 java/c# 脚本
kafka\bin\windows>kafka-console-producer --broker-list localhost:9092 --topic test
现在唯一困扰我的是我无法找到一种方法让 kafka 将消息直接推送到真正的公共 IP/Azure。看来通过代理的数据流量只能在 docker 内部运行。
【讨论】:
这行不通,我测试过,在我的情况下,Docker 版本 HDP 和 Virtualbox HDP 中的 Kafka 服务都不会从主机(Windows 10)连接,所有端口都是打开的。我可以通过连接到 HDP 中的 zookeeper 服务来获取 IDE 中的主题列表,但不是 Kafka,我测试了我能够连接在 Docker for Windows(Confluence 版本)中运行的 Kafka 服务,非常流畅,至于 HDP,我相信在 Ambari 的 Kafka 配置中添加了 Advertisementd.listeners 和 Host IP,服务重新启动,但仍然无法连接,Unix 中的手动设置将被 Ambari 中的设置刷新。以上是关于从外部连接kafka的问题的主要内容,如果未能解决你的问题,请参考以下文章
Kafka Docker - 无法从 docker 容器外部生产或消费