《StreamSets实现Kafka数据实时写入Mysql》

上一篇按照官网介绍实现了Mysql  -> Mysql的数据同步。但订阅数据库过于死板,当源表数据结构发生变化时管道就要重新写,不够灵活。这一篇我们来看下数据通过kafka同步到mysql是如何配置的。

kafka origin的安装就不介绍了,直接在Package Manager里点击安装就可以了。我们重点看下实现。

啰嗦一句吧。kafka origin目前支持Avro、Binary、Datagram、Delimited、JSON、Log、Protobuf、SDC Record、Text、XML这几种数据格式。我们使用最常用的JSON格式。

好,开干!

1. 新建管道

《StreamSets实现Kafka数据实时写入Mysql》_第1张图片

2. 选取KafkaConsumer Origin

《StreamSets实现Kafka数据实时写入Mysql》_第2张图片

3. 配置kafka

3.1 kafka

《StreamSets实现Kafka数据实时写入Mysql》_第3张图片

都能看懂,我就不说了。

3.2 Data Format

选择JSON

《StreamSets实现Kafka数据实时写入Mysql》_第4张图片

4. 选择JDBC  Destination

《StreamSets实现Kafka数据实时写入Mysql》_第5张图片

5. 配置JDBC Producer

5.1 JDBC

《StreamSets实现Kafka数据实时写入Mysql》_第6张图片

多个字段的话点击Column Name最右边的 加号,让mysql表字段和kafka字段一一对应,数据类型用默认的就行(数据库的字段类型)

选择订阅类型 INSERRT(可以建立多个destination,除了Default Operation不同外,其他配置相同,比如我建了两个,一个INSERT,一个UPDATE)

《StreamSets实现Kafka数据实时写入Mysql》_第7张图片

5.2 Credentials

配置JDBC的用户名和密码 

《StreamSets实现Kafka数据实时写入Mysql》_第8张图片

6. 异常处理

如果你是按照我说的配置的,外面应该还有个警告符号。这是因为我们还没有配置错误记录应该如何处理。

《StreamSets实现Kafka数据实时写入Mysql》_第9张图片

 点击视图空白处,点击Error Records

《StreamSets实现Kafka数据实时写入Mysql》_第10张图片

如何处理有多种方式,方便起见我选择写出到文件。这时会多出一个Error Records - Write to File警告

《StreamSets实现Kafka数据实时写入Mysql》_第11张图片

填一个本地路径(暂时没试过HDFS可不可以)

《StreamSets实现Kafka数据实时写入Mysql》_第12张图片

这时候一个kafka -> mysql的管道就建好了。目前只能实现INSERT功能,遇到相同的主键会报错,错误信息会写出到外部文件(就是刚配置的那个目录)。我还想配置一个UPDATE 功能,就是说主键相同,其他内容不同时,可以实现更新字段功能。这个配置和INSERT是一样的,只有JDBC的默认操作模式不同,选择UPDATE即可,其他一样。

有些同学可能找不到再哪加,说一下吧。

《StreamSets实现Kafka数据实时写入Mysql》_第13张图片

点击Kafka Consumer 拖动光标与JDBC Producer2连到一起

《StreamSets实现Kafka数据实时写入Mysql》_第14张图片

配置JDBC Producer2,与JDBC Producer1一样,唯一不一样的就是默认操作模式选择UPDATE。

配置好后界面是这样的

《StreamSets实现Kafka数据实时写入Mysql》_第15张图片

运行一波,自己用java编码发送测试数据。

《StreamSets实现Kafka数据实时写入Mysql》_第16张图片

目前表是空的

《StreamSets实现Kafka数据实时写入Mysql》_第17张图片

 启动StreamSets

《StreamSets实现Kafka数据实时写入Mysql》_第18张图片

启动kafka生产者发送五条数据。

 看一下数据库

《StreamSets实现Kafka数据实时写入Mysql》_第19张图片

数据进来了,下面我们测试下更新操作。

再发5条数据,主键一致,agentId不同

看一下结果

《StreamSets实现Kafka数据实时写入Mysql》_第20张图片

看一下 新纪录不给agentId赋值会怎么样

《StreamSets实现Kafka数据实时写入Mysql》_第21张图片

看一下结果

《StreamSets实现Kafka数据实时写入Mysql》_第22张图片

可见我们的需求完成了。新数据到来时,主键相同则更新值不同的字段,主键不存在则新增。大功告成。

参考:

https://streamsets.com/documentation/datacollector/latest/help/datacollector/UserGuide/Origins/KConsumer.html#concept_msz_wnr_5q

你可能感兴趣的:(StreamSets)