kafka—mysql同步到elasticsearch

本文介绍使用confluent kafka,实现将mysql的数据同步到elasticsearch。
一、官网

https://www.confluent.io

本文,下载的非最新版本,原因本版本有bin\confluent启动脚本,可以将confluent的相关服务一并启动,而新版5.3.1下则没有bin\confluent启动脚本。

http://packages.confluent.io/archive/5.0/confluent-5.0.0-2.11.tar.gz

历史版本清单:

https://www.confluent.io/previous-versions/?_ga=2.88895196.698576389.1571619762-1253541240.1571104105

二、相关使用
本文使用案例,均为单机版本(standalone)。
1、安装
解压即可,本文安装在/data/app/confluent目录下。
配置环境

export PATH=/data/app/confluent/bin:$PATH

2、启动confluent

confluent start

启动结果:

This CLI is intended for development only, not for production
https://docs.confluent.io/current/cli/index.html

Using CONFLUENT_CURRENT: /tmp/confluent.lIw8SGxT
Starting zookeeper
zookeeper is [UP]
Starting kafka
kafka is [UP]
Starting schema-registry
schema-registry is [UP]
Starting kafka-rest
kafka-rest is [UP]
Starting connect
connect is [UP]
Starting ksql-server
ksql-server is [UP]
Starting control-center
control-center is [UP]

启动后服务端口

#find ./ -name "*.*" | xargs grep  "8081"
zookeeper 2181
kafka 9092
control-center 9021

schema registry 8081
kafka-reset 8082
connector 8083
ksql-server 8088

查看confluent服务端口启动情况

 netstat -tunlp | grep -E '2181|9092|9021|8081|8082|8083|8088'

3、启动es connector sink
配置 etc/kafka-connect-elasticsearch/quickstart-elasticsearch.properties

name=elasticsearch-sink
connector.class=io.confluent.connect.elasticsearch.ElasticsearchSinkConnector
tasks.max=1
topics=kafka_es_test
key.ignore=false
connection.url=http://localhost:9200
type.name=kafka-connect
transforms=InsertKey,ExtractId
transforms.InsertKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.InsertKey.fields=id 
transforms.ExtractId.type=org.apache.kafka.connect.transforms.ExtractField$Key
transforms.ExtractId.field=id

检查elasticsearch-sink是否启动

#查看已启动connector列表
./bin/confluent list connectors
#卸装
./bin/confluent unload elasticsearch-sink
#加载
./bin/confluent load elasticsearch-sink
#加载非预定的connector
./bin/confluent load jdbc-member -d /data/app/confluent/etc/kafka-connect-jdbc/source-mysql-member.properties

./bin/confluent load es-ssouser-sink -d /data/app/confluent/etc/kafka-connect-elasticsearch/es-ssouser.properties


通过producer 推送数据
值得注意的事,执行完下来命令后,并不会退出或进入命令行界面。需要通过回传一行一行提交数据,通过ctrl+c退出。注意topic名称需要与quickstart-elasticsearch.properties配置文件中的topic保持一致。

./bin/kafka-avro-console-producer --broker-list localhost:9092 --topic kafka_es_test --property value.schema='{"type":"record","name":"person","fields":[{"name":"nickname","type":"string"}]}'

如果成功,能够在elasticsearch索引中查询到对应的数据。

4、启动connect-jdbc
启动 connect-jdbc,将数据库中表数据同步到kafka。
1)、首先装mysql-connector-jdbc.jar,从mysql官网下载,然后复制到%CONFLUENT_HOME%/share/java/kafka-connect-jdbc目录下。

cp mysql-connector-java-8.0.15.jar /data/app/confluent/share/java/kafka-connect-jdbc

2)、修改connect-jdbc配置

name=test-source-sqlite-jdbc-autoincrement
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=1
#数据库地址
connection.url=jdbc:mysql://127.0.0.1:3306/kafka_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false
#用户名
connection.user=
#密码
connection.password=
#白名单,目前设置白名单的表复制成功
table.whitelist=kafka_test.member
#模式自增
mode=incrementing
#自增字段名称
incrementing.column.name=id
#topic名称前缀,真实topic名称为前缀-表名
topic.prefix=test-mysql-
#数据库方言
dialect.name=MySqlDatabaseDialect
#设置是否检测数据库中自增长和时间戳字段不允许为空值,如果检查失败connector就停止启动。
validate.non.null=false
insert.mode=upsert
pk.mode = record_value
pk.fields = id
delete.enabled=true

3)、重新加载

#卸装
./bin/confluent unload jdbc-source
#加载
./bin/confluent load jdbc-source

4)、同步索引到elasticsearch
要将已经推送到kafka的mysql数据索引到elasticsearch,需要修改elasticsearch-sink的配置文件。

#1、配置文件topics项目加入test-mysql-member 
topics=kafka_es_test,test-mysql-member
#2、卸装elasticsearch-sink
./bin/confluent unload elasticsearch-sink
/3、加载elasticsearch-sink
./bin/confluent load elasticsearch-sink

完成上述3项后,数据会索引到elasticsearch,索引名为test-mysql-member

5、遗留问题
1、mysql表decimal字段问题
同步到elasticsearch中,及时设定为text字段,但存储的值是乱码:

#es结果
"redpack_money": "Fw==",

2、date日期字段同步

#mysql,字段类型为date
2019-11-23 
#es
"expire_date": 18223,

6、问题集锦
a、Server is not running
错误信息

 ksql-server, Kafka Server or Schema Registry Server is not running. Check your deployment

通过以下命令查看日志

confluent log kafka | ksql-server |kafka-rest

有时候服务不能启动,是因为服务端口被占用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值