我们正在尝试将MQTT源连接器链接到InfluxDB接收器连接器。现在前者工作正常,但后者给出了例外情况:
org.apache.kafka.connect.errors.ConnectException:退出 WorkerSinkTask由于不可恢复的异常。在 org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:484) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:265) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:182) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:150) 在 org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:146) 在 org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:190) 在 java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) 在java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
这是InfluxDB配置文件
connector.class=com.datamountaineer.streamreactor.connect.influx.InfluxSinkConnector
connect.influx.url=http://localhost:8086
connect.influx.db=iot
tasks.max=1
topics=simMetrics
connect.influx.kcql=INSERT INTO sensorMetrics SELECT * FROM simMetrics WITHTIMESTAMP sys_time()
name=influxdb-sink
connect.influx.username=""
这是消息结构:
{“timestamp”:1524572345184,“partition”:0,“key”:{“topic”: “machine / sensor / mytopic / test”,“id”:“1”},“offset”:0,“topic”: “simMetrics”,“value”:{“metrics”:{“buzzer”:0,“led”:0,“water”: false,“buzzer_timestamp”:1524571762798,“temperature_timestamp”: 1524571762816,“water_timestamp”:1524571762835,“粉丝”:0,“光”: 500,“温度”:27.371554588194957,“assetName”:“SIMopcua”, “fan_timestamp”:1524571762791,“light_timestamp”:1524571762808, “led_timestamp”:1524571762827}}}
MQTT源连接器配置:
connector.class=com.datamountaineer.streamreactor.connect.mqtt.source.MqttSourceConnector
name=mqtt-source
connect.mqtt.kcql=INSERT INTO simMetrics SELECT * FROM machine/sensor/mytopic/test WITHCONVERTER=com.datamountaineer.streamreactor.connect.converters.source.JsonSimpleConverter
connect.mqtt.service.quality=1
connect.mqtt.hosts=tcp://192.168.208.203:1884
更新
我们发现问题出在温度值格式上。
由于我们尚未配置字段的类型,因此InfluxDB将温度值理解为double。具有小数分隔符的所有值都被正确保存,当Kafka发送值时出现问题,没有小数部分,省略小数分隔符。
我们如何解决这个问题呢?
PS:实际的解决方法是将0.00000001添加到所有传入温度。