本文已参与“新人创作礼”活动,一起开启掘金创作之路。
之前一篇博客记录了将Oracle的数据实时同步到MySQL中,因为项目需要,将多个数据源的数据先集成到统一的MySQL数据库中,然后再将这些数据传输到Rabbitmq中,最后经过Spark传输到HBASE中。之前也考虑过将这些绘制到一个管道中,最后因为Rabbitmq我并没有找到可以作为中间的过程的组件,只能拆分成两个管道,这篇就记录一下将MySQL中的数据传输到Rabbitmq Producer中。关于前面讲Oracle数据同步到MySQL的可以看这篇:使用Streamsets将Oracle数据实时同步到MySQL中
1、首先绘制整个的管道
2、配置MySQL Binary Log参数
A、配置MySQL Binary Log
这里如果需要从二进制日志的开头开始读取事件则勾上。未选择时,原点将从上次保存的偏移开始读取事件。
B、填写连接MySQL的账号与密码
C、配置Advanced
读取二进制日志文件中的事件时要监听的表的列表。如果是多个表的话格式:
<database name>.<table name>,<database name>.<table name>......
3、配置Rabbitmq Producer参数
A、配置通用参数
B、配置RabbitMQ
RabbitMQ URI。通常使用以下格式: amqp:< host >:< port >/< virtualhost >。
C、配置Queue
这里的Name填写的是使用或新创建的队列的名称。
D、配置Exchange
可以选择为要使用的binding配置以下绑定属性。如果未配置任何binding,则使用默认交换。这些属性直接对应于RabbitMQ属性。有关更多信息,请参见RabbitMQ文档。
这里binding的类别有三种:direct exchange、topic exchange与fanout exchange。
direct exchange:
此类型的exchange路由规则很简单,exchange在和queue进行binding时会设置routingkey, 然后我们在将消息发送到exchange时会设置对应的routingkey。
在direct类型的exchange中,只有这两个routingkey完全相同,exchange才会选择对应的binging进行消息路由。
topic exchange:
此类型exchange和上面的direct类型差不多,但direct类型要求routingkey完全相等,这里的routingkey可以有通配符:'','#'.
其中''表示匹配一个单词, '#'则表示匹配没有或者多个单词
fanout exchange:
此exchange的路由规则很简单直接将消息路由到所有绑定的队列中,无须对消息的routingkey进行匹配操作。
E、配置Advanced
F、配置DataFormat
这里DataFormat支持的消息的数据格式:
- Avro
- Binary
- Delimited
- JSON
- Protobuf
- SDC Record
- Text
Text Field Path:包含要写入的文本数据的字段。所有数据必须合并到指定字段中。
4、解决问题
第一次启动时报了个错:
报错:
RUNNING_ERROR: MYSQL_006 - MySql server error: A slave with the same server_uuid/server_id as this slave has connected to the master; the first event 'binlog.000006' at 1661, the last event read from './binlog.000006' at 1692, the last byte read from './binlog.000006' at 1692…………
因为MySQL服务器之前测试具有相同server_uuid / server_id的从服务器已连接到主服务器,所以这里需要到 MySQL Binary Log中修改Server ID。
5、测试数据
Oracle中添加了数据后:
因为之前的管道流配置MySQL中也会添加数据:
最后通过这次配置的管道流添加数据到Rabbitmq中。可以打开rabbitmq的管理界面: http://192.168.105.77:15672
登录后选择Queues,可以看到刚刚新建的:
然后再Streamsets的管道中看到启动成功: