canal同步mysql数据变化到kafka(centos部署)

第一步:环境准备

  • 系统CentOS7.9:查看CentOS版本: cat /etc/redhat-release;其中机器内存至少2个G内存,因为canal启动的默认最大内存是2G。
  • jdk版本jdk1.8: 安装步骤请见:[https://blog.csdn.net/u010132847/article/details/117002124?spm=1001.2014.3001.5501][https_blog.csdn.net_u010132847_article_details_117002124_spm_1001.2014.3001.5501]
  • 部署mysql8版本的机器ip: 192.168.187.132,mysql8版本安装请见:[https://blog.csdn.net/u010132847/article/details/116905080?spm=1001.2014.3001.5501][https_blog.csdn.net_u010132847_article_details_116905080_spm_1001.2014.3001.5501]
  • 安装canal+kafka的机器ip: 192.168.187.131

第二步:mysql先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式。

  • mysql8版本默认是开启binlog功能的,这一步实际可以忽略。

pic_66783517.png

第三步:数据库新建一个canal账号并赋予其数据库同步的权限。

  • 新建用户:create user ‘canal’@‘%’ identified by ‘Canal123!’;

pic_8b4941bc.png

  • 赋予用户canal的SELECT、REPLICATION SLAVEREPLICATION CLIENT权限:

pic_c24861d2.png

  • “mysql_native_password ”的特殊处理:mysql8默认用sha2这个plugin来进行密码加密,如果用户密码生产时没用这个插件,客户端接入的时候会报“caching_sha2_password Auth failed”的错误,如下错误显示。
2020-05-06 17:19:24.944 [destination = example , address = /192.168.187.132:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example[com.alibaba.otter.canal.parse.exception.CanalParseException: java.io.IOException: connect /192.168.187.132:3306 failure
Caused by: java.io.IOException: connect /127.0.0.1:3306 failure
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:83)
        at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.connect(MysqlConnection.java:89)
        at com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser.preDump(MysqlEventParser.java:86)
        at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:183)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: caching_sha2_password Auth failed
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.negotiate(MysqlConnector.java:257)
        at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:80)
        ... 4 more
]
  • 因此需要使用关键字“mysql_native_password ”插件赋值账户密码,如下:

表达式如:alter user ‘canal’@‘%’ identified with mysql_native_password by ‘Canal123!’;

pic_bd3f41ea.png

第四步:安装部署kafka(包括zookeeper)

  • 下载安装包:wget [https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz][https_mirrors.tuna.tsinghua.edu.cn_apache_kafka_2.8.0_kafka_2.13-2.8.0.tgz]
  • 解压安装包:tar -zxvf kafka_2.13-2.8.0.tgz

pic_9670c960.png

  • 在/opt/kafka_2.13-2.8.0/bin目录可以看见这些启动脚本(稍微注意就发现里面还包含zookeeper脚本,是的,kafka安装包里包含了zookeeper服务部署,不用另外下载部署,直接在这里启动):

pic_a1088a15.png

  • 在/opt/kafka_2.13-2.8.0/config目录可以看见服务的配置:

pic_64452e2e.png

  • 先启动zookeeper(配置文件zookeeper.properties无需改动):

命令:bin/zookeeper-server-start.sh -daemon config/zookeeper.properties &

pic_9275bf17.png

备注:这里“-daemon”表示守护进程启动。Daemon进程也就是守护进程,linux大多数的服务进程都是通过守护进程实现的。比如0号进程(调度进程) ,1号进程(init进程)。从其名字守护看出其一般就是机器启动就运行,关机才停止。所以其应该不会受到终端的影响。同时其实在后台运行的。

  • 再启动kafka(配置文件config/server.properties需要改动,如下):
zookeeper.connect=192.168.187.131:2181
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://localhost:9092 #本机ip
# ...

之后启动执行命令:bin/kafka-server-start.sh -daemon config/server.properties &

pic_36d7f57f.png

停止kafka服务执行命令:bin/kafka-server-stop.sh

第五步:安装部署canal

  • 下载canal: wget [https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz][https_github.com_alibaba_canal_releases_download_canal-1.1.5_canal.deployer-1.1.5.tar.gz]
  • 解压canal(canal安装包解压放置新建canal文件解压): tar -zxvf [canal.deployer-1.1.5.tar.gz][https_github.com_alibaba_canal_releases_download_canal-1.1.5_canal.deployer-1.1.5.tar.gz]

pic_90e475c0.png

  • 解压后的目录解释如下:

pic_a7d052c6.png

- bin    # 运维脚本文件
- conf   # 配置文件目录
  canal_local.properties  # canal本地配置,一般不需要改动
  canal.properties        # canal服务配置
  logback.xml             # logback日志配置
  metrics                 # 度量统计配置
  spring                  # spring-实例配置,主要和binlog位置计算、一些策略配置相关,可以在canal.properties选用其中的任意一个配置文件
  example                 # 实例配置文件夹,一般认为单个数据库对应一个独立的实例配置文件夹
    instance.properties   # 实例配置,一般指单个数据库的配置
- lib    # 服务依赖包
- logs   # 日志文件输出目录
- plugin # 支持的插件目录
  connector.kafka-1.1.5-jar-with-dependencies.jar     #kafka依赖包
  connector.rabbitmq-1.1.5-jar-with-dependencies.jar  #rabbitmq依赖包
  connector.rocketmq-1.1.5-jar-with-dependencies.jar  #rocketmq依赖包
  • 修改配置文件:

配置文件config/canal.properties找到“canal.serverMode”的值改成“kafka”,其他无需改动。

pic_a784088d.png

配置文件config/exmaple/instance.properties:

找到“canal.instance.master.address”,将其值改成安装mysql服务器的ip及端口号。

找到“canal.instance.dbUsername”和“canal.instance.dbPassword”的值改成之前新建的mysql数据库备份账号canal及其密码,其他无需改动。

pic_1c3190ff.png

  • 启动canal服务:找到/opt/kafka/bin目录,执行脚本startup.sh。

pic_0ee602f5.png

第六步:测试数据同步功能

  • 使用其他有创建数据库、表权限的账号在mysql服务创建一个数据库并创建一张表。

pic_17889585.png

  • 我们注意到config/example/instanct.properties有个“example”的topic配置,这是kafka测试使用topic,已经存在无需创建,我们拿这个topic来测试,如下图:

pic_0ebe4f66.png

  • 在kafka安装目录目录/opt/kafka_2.13-2.8.0,执行kafka的topic的消费者日志,发现有创建对应表的消费日志。

命令:bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic example

pic_5b9d3a09.png

  • 再插入一条数据看下是否有对应消息日志:

pic_33ffc81b.png

pic_32cf4d9f.png

### 回答1: 可以使用Canal来实现将MySQL数据同步Kafka。Canal是阿里巴巴开源的一款基于MySQL数据库增量日志解析和同步的工具,可以实时捕获MySQL数据库的增量日志,解析日志内容,并将解析后的数据发送到Kafka等消息队列中。 具体实现步骤如下: 1. 安装Canal并配置MySQL数据源信息。 2. 配置CanalKafka输出端,包括Kafka的地址、topic等信息。 3. 启动Canal服务,并开启Kafka输出端。 4. 在MySQL数据库中进行数据操作,Canal会实时捕获增量日志并将解析后的数据发送到Kafka中。 通过以上步骤,就可以实现将MySQL数据同步Kafka中。 ### 回答2: Canal是一个开源的MySQL数据数据同步工具,可用于将MySQL数据库中的数据推送到Kafka等消息队列系统中。Canal具有简单易用和高效稳定等特点,可以实时地将MySQL的操作事件转换为消息发布到Kafka中,从而实现数据的传输和同步。 Canal数据同步过程主要分为三个步骤:数据的抽取、数据的传输和数据的写入。在数据的抽取阶段,Canal会通过监听MySQL的binlog日志来实时获取数据库的更新操作事件。在数据的传输阶段,Canal会将获取到的数据转化为Kafka数据结构并将数据推送到Kafka中。在数据的写入阶段,Kafka消费者会接收到Canal推送过来的数据并将数据写入到目标数据库中。 Canal同步MySQL数据Kafka具有以下优点: 1. 实时性好:Canal可以实时获取MySQL的binlog日志,因此同步数据的速度较快,数据可以实时同步Kafka中,提高了数据同步的实时性。 2. 高效稳定:Canal具有高效稳定的数据同步能力,可以对MySQL的大量数据进行实时同步,同时Canal对复杂的数据类型和操作也具有很好的兼容性。 3. 低延迟:Canal同步MySQL数据Kafka的过程中,除了Canal本身的处理时间外,数据传输和写入等步骤都可以实现实时同步,因此具有低延迟的特点。 4. 扩展性强:Canal支持插件机制,可以根据需要进行扩展和定制,支持多种不同的数据源和目标,也支持多线程和分布式部署等高级特性。 总之,Canal同步MySQL数据Kafka是一种高效稳定、实时性好、低延迟、扩展性强的数据同步方案。在实际的数据同步应用中,可以根据具体情况选择适合自己的部署方式和应用场景,并结合其他工具和技术进行更加灵活高效的数据同步。 ### 回答3: Canal是阿里巴巴公司开发的一款基于binlog的增量数据同步工具,可以把MySQL数据库的数据变更同步Kafka等消息队列或其他存储介质中。 Canal架构包括三个组件:Canal Server、Canal Client和Canal Adapter。 Canal Server是作为数据源的MySQL数据库的代理工具,负责解析MySQL的binlog日志,并将变更事件以JSON的形式发送给Canal Client。 Canal Client是Canal数据同步的传输逻辑,接受Canal Server解析出来的binlog事件,并将事件转化为适合Kafka等消息队列的消息格式。 Canal Adapter是Canal的一个插件式架构,根据业务需求,可以通过Adapter来将数据发送到Kafka或其他消息队列、ElasticSearch等存储介质中。 在使用Canal同步MySQL数据Kafka时,需要配置Canal Server和Canal Client,其中Canal Server需要连接MySQL数据库,并开启Binlog日志功能。Canal Client需要连接Canal Server,接收MySQL数据库的变更事件,并将事件转换为对应的消息格式发送到Kafka中。 同时,需要根据业务需求配置Canal Adapter,将MySQL数据库的数据变更事件转化为Kafka消息队列的消息格式,并发送到Kafka中。 总之,Canal是一款可靠高效的增量数据同步工具,可以帮助企业快速实现数据的分布式同步和多数据源之间的数据交换。在实际应用中,可以结合其他开源工具,如Flink、Presto等,构建出一套全方位的数据处理和分析平台,实现数据的快速处理和洞察。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值