0

我们正在尝试将 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) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.

这是 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”,“值”:{“指标”:{“蜂鸣器”:0,“LED”:0,“水”:假,“蜂鸣器时间戳”:1524571762798,“温度时间戳”:1524571762816,“水时间戳”:1524571762835 ,“风扇”:0,“光”:500,“温度”:27.371554588194957,“资产名称”:“SIMopcua”,“fan_timestamp”:1524571762791,“光时间戳”: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 将温度值理解为双精度值。所有具有小数点分隔符的值都被正确保存,当 Kafka 发送值时出现问题,没有小数部分,省略了小数点分隔符。我们如何解决这个问题?
PS:实际的解决方法是为所有输入温度添加 0.00000001。

4

0 回答 0