1.安装kafka-connect-influxdb
运行如下命令
confluent-hub install confluentinc/kafka-connect-influxdb:1.1.2
截图如下
出错,安装失败,原因是未设置好confluent的安装目录和bin目录,因此需要设置一下,运行如下脚本
# 安装位置修改为自己对应的地方
export CONFLUENT_HOME=/Users/yangliu/Documents/05demos/confluent-5.5.0
export PATH=$PATH:$CONFLUENT_HOME/bin
重新执行安装的命令就好了,会在$CONFLUENT_HOME/share/confluent-hub-components
下安装好,并且提供相关配置
2. 使用connect进行数据同步
https://docs.confluent.io/current/connect/kafka-connect-influxdb/influx-db-sink-connector/index.html
增加配置文件,在$CONFLUENT_HOME
下面
文件位置:etc/kafka-connect-influxdb/influxdb-sink-connector.properties
name=InfluxDBSinkConnector
connector.class=io.confluent.influxdb.InfluxDBSinkConnector
tasks.max=1
topics=testa
influxdb.url=http://localhost:8086
influxdb.db=influxTestDBa
measurement.name.format=${topic}
value.converter=org.apache.kafka.connect.json.JsonConverter
# 注意此配置,json格式要严格按照该Connector
value.converter.schemas.enable=true
key.converter=org.apache.kafka.connect.storage.StringConverter
然后在已经启动confluent的情况下,装上该Connector,命令如下。只能先启动confluent然后装上Connector
#装配
confluent local load InfluxDBSinkConnector -- -d etc/kafka-connect-influxdb/influxdb-sink-connector.properties
如果需要修改配置,则暂时卸下该Connector,然后修改完重新装上
# 卸载
confluent local unload InfluxDBSinkConnector -- -d etc/kafka-connect-influxdb/influxdb-sink-connector.properties
3. 有关数据格式的文章详解
这个Connector好像并不是那么好用,关于其数据结构的序列化解释有如下
https://www.confluent.io/blog/kafka-connect-deep-dive-converters-serialization-explained/
如果是json格式,则第一层的key必须是schema
和payload
如果是其他字符串格式,目前没有调试出来
4. 查看日志
https://docs.confluent.io/current/cli/command-reference/confluent-local/confluent_local_log.html
less 方式查看日志
# log
confluent local log connect
命令q
代表退出,命令G
代表翻到最后一行
5. Python脚本测试
Python脚本如下,里面json的格式就是该Connector规定的格式来的
from kafka import KafkaProducer
import time
import json
if __name__ == '__main__':
producer = KafkaProducer(bootstrap_servers='192.168.1.119:9092', value_serializer=lambda v: json.dumps(v).encode('utf-8'))
value = "hereTime" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# producer.send('conkafkainflux', value=bytes(value, encoding = "utf8"), partition=0)
producer.send('testa', {"schema":{"type":"struct","fields":[{"type":"map","keys":{"type":"string","optional":False},"values":{"type":"string","optional":False},"optional":False,"field":"tags"},{"type":"string","optional":False,"field":"time"},{"type":"double","optional":True,"field":"value"}],"optional":False,"version":1},"payload":{"tags":{"id":"5"},"time":"2019-07-25T11:43:19.201040841Z","value":500.0}},
partition=0)
producer.flush()
如下,就是目前的结果