上下文:我正在尝试将Kafka连接到我使用ESP8266设备和SoftAP创建的本地WiFi网络上。
我想做的事:我希望设备(与ESP8266 SoftAP连接的笔记本电脑)在未连接到互联网的本地WiFi网络上使用Kafka相互发送和接收消息。
问题:网络中的一个设备是Raspberry Pi,我正在它上面运行Kafka。我得到的错误是
[2022-05-09 14:54:43,622] WARN [Controller id=0, targetBrokerId=0] Error connecting to node :192.168.4.2:9092 (id: 0 rack: null) (org.apache.kafka.clients.NetworkClient)
java.net.UnknownHostException: :192.168.4.2: invalid IPv6 address
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1345)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
at org.apache.kafka.clients.DefaultHostResolver.resolve(DefaultHostResolver.java:27)
at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:110)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:511)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:468)
at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:173)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:984)
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:301)
at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:64)
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:291)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:245)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
[2022-05-09 14:54:43,622] INFO [Controller id=0, targetBrokerId=0] Client requested connection close from node 0 (org.apache.kafka.clients.NetworkClient)
一些配置/server.properties如下:
listeners=PLAINTEXT://:0.0.0.0:9092
advertised.listeners=PLAINTEXT://:192.168.4.2:9092
zookeeper.connect=localhost:2181
2条答案
按热度按时间hc2pp10m1#
错误是说它试图使用
:192.168.4.2
作为IPv6主机,而不是IPv4地址。您需要在两个侦听器设置中删除该IP的前导冒号。
Kafka对于Raspberry Pi来说可能太多了,这取决于模型。Moscow MQTT或NATS将更轻量级。
atmip9wb2#
您可以考虑试用我们的Scramjet Transform Hub作为替代品。
通常它与平台一起使用,将分布式位置连接在一起,但如果您只是将其安装在Pi上并与
/api/v1/topic/*
端点建立http连接,则可以通过长寿命POST
请求推送数据并使用长寿命GET
接收(即使只有二进制数据)来在控制器之间传输消息(使用适当的内容类型)。要安装它,您需要在Pi上安装node.js,然后只需:
你也可以写一个js或python程序(长寿命云函数)来确保你得到正确的验证:
然后发送命令:
我们有一些代码示例,可以从Hub中运行的程序将基于Zephyr的项目代码部署到ESP 32/RPi 2040-尽管我认为您的用例有点不同。
这里有一些更多的链接:
我希望这是有帮助的。:)
答:我是作者。:)