无法通过MQTT经纪人在Lenses Kafka上接收数据

时间:2018-07-31 09:42:17

标签: apache-kafka cloud mqtt sensor messagebroker

关于使用镜头卡夫卡,我有一个特别的问题。传感器数据未在其末端接收。

也就是说,我尝试使用Docker容器创建一个网络连接,其中每个容器都代表服务。 服务如下:

  1. 第一个是使用MQTT协议发送数据的传感器(在这种情况下,是连接了传感器的Raspberry Pi)
  2. MQTT经纪人-在这种情况下为Mosquitto,用于获取消息并与Lenses交互
  3. Lenses Kafka-在这种情况下用于Mosquitto与其他服务(例如另一端的InfluxDB)之间交互的系统

我可以肯定地说发送的数据已成功接收,因为我使用Apache JMeter来检查从Mosquitto站点接收到的数据。问题出现在镜头一侧,可以识别连接,但未接收到数据,并显示以下错误:

MqttException (0) - java.net.NoRouteToHostException: Host is unreachable (Host unreachable) 
 at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
 at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:715)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
 at java.util.concurrent.FutureTask.run(FutureTask.java:266)
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
 at java.lang.Thread.run(Thread.java:748) 
Caused by: java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
 at java.net.PlainSocketImpl.socketConnect(Native Method)
 at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
 at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
 at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
 at java.net.Socket.connect(Socket.java:589) 
 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:84)
 at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:701) 
... 7 more

在Lenses端用来读取数据的配置代码是:

connector.class=com.datamountaineer.streamreactor.connect.mqtt.source.MqttSourceConnector
connect.mqtt.clean=true
connect.mqtt.timeout=1000
tasks.max=1
connect.mqtt.keep.alive=1000
name=Mosquitto
connect.mqtt.kcql=INSERT INTO kafka_sensor_data SELECT * FROM /sensor_data WITHCONVERTER=`com.datamountaineer.streamreactor.connect.converters.source.JsonSimpleConverter`
connect.mqtt.service.quality=1
connect.mqtt.client.id=dm_source_id
connect.mqtt.converter.throw.on.error=true
connect.mqtt.hosts=tcp://XXX:1883

(XXX仅出于安全目的,已经有经过测试的IP地址)。

这种方法实际上一直有效到最近,但是突然之间我现在变成了这个错误。我检查了连接和端口连接,但是那里的所有东西都在工作。不太确定在哪里检查了。

1 个答案:

答案 0 :(得分:0)

一段时间后,我设法找到了问题。

这是通过使用docker容器进行的。尽管该服务设法使端口和地址保持开放状态并与外部网络组织在一起,但由于Lenses无法识别MQTT Broker,所以内部存在一些问题。

配置了我自己的网络后,而不是让它创建为默认网络,我设法解决了这个问题。