通过使用ESP8266创建的本地wifi网络连接Kafka时出错

yvfmudvl  于 2023-10-15  发布在  Apache
关注(0)|答案(2)|浏览(147)

上下文:我正在尝试将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
hc2pp10m

hc2pp10m1#

错误是说它试图使用:192.168.4.2作为IPv6主机,而不是IPv4地址。
您需要在两个侦听器设置中删除该IP的前导冒号。
Kafka对于Raspberry Pi来说可能太多了,这取决于模型。Moscow MQTT或NATS将更轻量级。

atmip9wb

atmip9wb2#

您可以考虑试用我们的Scramjet Transform Hub作为替代品。
通常它与平台一起使用,将分布式位置连接在一起,但如果您只是将其安装在Pi上并与/api/v1/topic/*端点建立http连接,则可以通过长寿命POST请求推送数据并使用长寿命GET接收(即使只有二进制数据)来在控制器之间传输消息(使用适当的内容类型)。
要安装它,您需要在Pi上安装node.js,然后只需:

npm i @scramjet/sth
sth --help # this will get you the command line options

你也可以写一个js或python程序(长寿命云函数)来确保你得到正确的验证:

module.exports = function* (input) {
    for await (const chunk of input) {
        if (!valid(chunk)) continue;
        yield doSomeMapping(chunk);
    }
}

然后发送命令:

si seq deploy . --input-topic esp.input --output-topic esp.output

我们有一些代码示例,可以从Hub中运行的程序将基于Zephyr的项目代码部署到ESP 32/RPi 2040-尽管我认为您的用例有点不同。
这里有一些更多的链接:

我希望这是有帮助的。:)
答:我是作者。:)

相关问题