大数据项目任务:mysql与es集群数据实时同步更新

启动数据库net start mysql,

输入mysql -u root -p ,密码:root

出现mysql>配置完成

输入(alter user user() identified by "密码";)

mysql退出 mysql>quit;

net start mysql打开数据库

mysql退出 mysql>quit;

输入net stop mysql关闭数据库

任务一、对数据库mysql进行操作的时候,es也要跟着实时动态更新。

1.mysql数据库与elasticsearch全文检索的同步,通过binlog的设置对mysql数据库操作的日志进行记录,利用python的模块对日志进行操作,再利用kafka的生产者消费者模式进行订阅,最终实现elasticsearch的同步。

binlog技术实现MySQL和elasticsearch进行同步

binlog是数据库里的二进制日志文件,存储关于数据库增删改查的操作,只要有增删改查的操作就可以在binlog中体现出来,

用这个日志可以体现用户的增删改查。

解决两个问题

1.binlog如何设置

binlog与sql数据库有关系,可以在mysql配置文件my.ini,当配置文件修改时,重启数据库

打开命令行,输入mysql -u root -p ,密码:root;进入数据库

显示与binlog有关的变量: show global variables like "%binlog%";

修改binlog_format变量值为行级row:set global binlog_format="ROW";

再用show binlog events;查看数据库增删改的操作

2.python如何读取binlog数据的

python是通过mysql-replication实现binlog日志的读取的

然后打开pycharm去导入binlog监控数据库的操作

我到最后一步老报错那一行代码,for row in binlogstream.rows:

说什么编码错误:LookupError: unknown encoding: utf8mb3,在这里卡了很久,一直找不到解决方法


这里解决了这个问题,原因是我的数据库在创建的时候可能出了点问题,是使用命令行创建的,但之后试了一下使用SQLyog创建数据库选中基字符集类型之后,有一个uft8mb3的字符集,这个之前在网上查找的是数据库改成8.0版本之后没有utf8了,只有utf8mb3代替了,但这里还是会乱码,这之后改掉了创建表的时候列的数据类型,然后可以正常同步数据库的内容,成功输出


之后进行了下一步

下一步就是通过这个日志 把读出来的信息同步到elasticsearch中就更好了

因为数据量很大,所以使用Kafka生产者消费者模式对数据进行处理,消息来消息去

Kafka消息系统

采用页面缓存技术+磁盘顺序读写技术

Page cache基于页面缓存技术+磁盘顺序读写

Kafka实现需要zookeeper调度,对服务器集群进行管理的一个服务

启动zookeeper命令行:

进入d盘

cd d: 敲命令:zkServer

启动kafka服务命令行:先进入windows

kafka-server-start

再设置config中的server.properties

启动kafka

D:\kafka\kafka_2.13-3.4.0\bin\windows>kafka-server-start ..\..\config\server.properties

启动kafka完之后,启动kafka生产者消费者模式,主要利用的是kafka生产者消费者模式

打开命令行,进入d盘,

d:

cd kafka

cd kafka_2.13-3.4.0

cd bin

cd windows

dir

kafka是基于topic消息订阅模式的,利用topic由生产者发送到消费者,所以要先关联topic

启动生产者

kafka-console-producer --broker-list localhost:9092 --topic test

启动消费者(基于topic消息订阅的)

kafka-console-consumer --bootstrap-server localhost:9092 --topic test

在生产者输入this a book

如下图消费者会传过去数据

上述是命令行的启动和设置方式

现在用python模块来实现kafka的生产者消费者模式,安装的是kafka-python模块,实现了python操作kafka的服务

生产者端使用KafkaProducer

消费者端使用KafkaConsumer

注意:在消费者一端的参数要有生产者一端的变量名

现在要直接结合之前的reader,将mysql数据库的数据同步到kafka生产者消费者中,最后运行,再随便改几个数据库的数据,最后可以看到kafka消费者也同步了数据

这样就成功的将reader加入了kafka_producer中


接下来进行elasticsearch数据的同步

  1. MySQL数据首先存储在elasticsearch中

(1)python读取mysql数据,用pysql的模块,建一个reader_data读取pysql数据

(2)把读取的数据存储到elasticsearch当中,可以使用Elasticsearch.index方法进行存储

先启动es


笔记做到这儿的时候,我不明白之前为什么不这样读取数据,还要用kafka生产者,消费者模式来处理,然后代码跑不通,构建不了es索引

调试很多次 调试不通,所以先去找找利用Java写SQL与es数据同步

  1. 当MySQL中的数据发生变化时,同时elasticsearch中的数据也要发生变化




1.mysql数据库与elasticsearch全文检索的同步,通过binlog的设置对mysql数据库操作的日志进行记录,利用python的模块对日志进行操作,再利用kafka的生产者消费者模式进行订阅,最终实现elasticsearch的同步。

2.mysql数据库与elasticsearch全文检索的同步,通过binlog的设置对mysql数据库操作的日志进行记录,利用python的模块对日志进行操作,再利用kafka的生产者消费者模式进行订阅,最终实现elasticsearch的同步。本讲主要针对elasticsearch的增删改同步数据库。

create database readerBinlog default charset=utf8;

use readerBinlog;

create table mytable(id int(11),name varchar(20));

insert into mytable values(1,"孙大圣");

select * from mytable;

show binlog events;

update mytable set name ="黑熊怪" where id=5;

delete from mytable where id=5;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值