Smail_的gravatar头像
Smail_ 2018-03-25 13:05:30

基于mysql binlog的redis/elasticsearch数据同步中间件

1.你的mysql必须开启主从同步,mysql配置如下

#binlog配置
log-bin=/home/mysql/binlog/mysql-bin
binlog-format=ROW
server_id=1
expire_logs_days=7

2.在开启binlog的mysql下,新建一个数据库,数据库名随意,例如:data_system,下文的配置要用到

3.在data_system中创建新增规则

DROP TABLE IF EXISTS `action`;
CREATE TABLE `action` (
  `key` varchar(200) NOT NULL,
  `action` text NOT NULL,
  PRIMARY KEY (`key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

解释:

key:数据库名.表名.事件 事件支持三种:insert、update、delete

action:动作,及事件触发的同步动作

注意:

INSERT INTO `action` VALUES 
('data_system.action.delete','{\"method\":[\"updateEventWithAtion\"]}'),
('data_system.action.insert','{\"method\":[\"updateEventWithAtion\"]}'),
('data_system.action.update','{\"method\":[\"updateEventWithAtion\"]}')

这三条规则务必保留,method的值可以随意改,但是要记下来,下一步的配置中要用到

作用:

在你修改这张表的时候,中间件会自动加载你修改了规则,从而做到动态规则适配。

其它表的action约定方式:

('mydb.article.update','{\method\":[\"redis\",\"elasticsearch\"],\"redisKeys\":[\"ArticleServiceImpl.getArticle|id_#0\"],\"elasticsearchType\":\"article\",\"elasticsearchIndexId\":2,\"elasticsearchFormatFields\":[\"id|0\",\"title|1\",\"keywords|3\",\"digest|4\",\"categoryId|6\",\"sourceId|7\",\"pubTime|10_tf\",\"headline|8\",\"titleHash|2\"]}');

解释:

method:只支持两种redis、elasticsearch,用户可以根据源码自定义新增新的方式

redisKeys:redis缓存中的key,本案例中的key只做删除操作,#0表示取哪列的值

elasticsearchType:你搜索引擎中给这张表的数据设定mappring->type

elasticsearchFormartFields:elasticsearch中这张表索引了哪些字段,格式为:es字段名|取哪列的值(_tf 表示时间格式化,格式化后的时间格式为:yyyy-MM-dd HH:mm:ss,这里忘了给个配置项,让用户可以自定义)

取哪列的值:这个需要使用者,按照数据表的j建表sql的顺序取值,从0开始

4.中间件配置文件project.properties

#以下参数都为强制必须配置的参数
#ServerId,和binlog配置中的server_id不一样即可
server_id=

#存放事件规则的数据库连接配置,中间件启动时从这里去读取事件和要做的事
event_db_url=jdbc:mysql://xxxx:3306/新建的数据库名
event_db_user=
event_db_password=

#更新事件规则的触发器,value看第二步中的三个强制保留的配置
event_update_trigger=

#发送binlog日志的master数据库连接配置
binlog_db_host=
binlog_db_port=
binlog_db_user=
binlog_db_password=

#elasticsearch连接配置
es_host_port=http://127.0.0.1:9200
es_index_name=

#redis连接配置(没有密码也请留下配置,勿删)
redis_host=127.0.0.1
redis_port=6379
redis_password=

配置文件配好后,请在你部署jar包的目录新建一个config文件夹,将project.properties放到里面即可

5.下载项目,撸一把!

基于mysql binlog的redis/elasticsearch数据同步中间件


打赏

已有1人打赏

最代码官方的gravatar头像

文件名:com.zip,文件大小:17.284K 下载
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友