Canal+kafka+zk实现mysql增量数据同步

一、Zk

下载zk
链接:https://pan.baidu.com/s/1fmOSl08mKs-nVJwDgLUrCg 
提取码:6666 

1、解压新建data
Canal+kafka+zk实现mysql增量数据同步_第1张图片
2、进入conf文件夹 配置文件名称改为zoo.cfg,再修改配置dataDir
Canal+kafka+zk实现mysql增量数据同步_第2张图片

3、配置环境变量:ZOOKEEPER_HOME:你的zookeeper安装路径;

启动 zkServer.cmd

Canal+kafka+zk实现mysql增量数据同步_第3张图片

二、Kafka

链接:https://pan.baidu.com/s/16v2EA0oFIuEEXETvQgDsnQ 
提取码:6666 

1、解压,新建logs
Canal+kafka+zk实现mysql增量数据同步_第4张图片

2、修改kafka\config\ server.properties中的log.dirs路径为你的logs路径
Canal+kafka+zk实现mysql增量数据同步_第5张图片

必须cmd进入D:\kafka目录下运行kafka-server-start.bat
运行命令:.\bin\windows\kafka-server-start.bat .\config\server.properties

问题:Kafka启动提示“此时不应有 \Java\jdk1.8.0_73\lib\dt.jar”
Jdk路径不应该有空格/括号

三、Canal配置kafka生产者

链接:https://pan.baidu.com/s/1O7m95qhlcl9FUVT0_w0PaQ
提取码:6666 

1、修改文件canal_1.1.4\conf\example\instance.properties
Canal+kafka+zk实现mysql增量数据同步_第6张图片

2、修改文件canal_1.1.4\conf\canal.properties,指定为kafka
在这里插入图片描述

3、指定kafka的地址
Canal+kafka+zk实现mysql增量数据同步_第7张图片

4、默认group.Id为test-consumer-group,在监听topic时要用到
Canal+kafka+zk实现mysql增量数据同步_第8张图片

问题:kafka启动报错java.io.IOException: Map failed,内存溢出
修改D:\kafka\bin\windows下启动文件kafka-server-start.bat,改256/512M

Canal+kafka+zk实现mysql增量数据同步_第9张图片

问题:ERROR Error while deleting the clean shutdown file in dir ………
删除kafka-logs下的所有日志

四、Springboot整合kafka

1、Pom文件引入:

<dependency>
    <groupId>org.springframework.kafkagroupId>
    <artifactId>spring-kafkaartifactId>
dependency>

<dependency>
    <groupId>org.apache.kafkagroupId>
    <artifactId>kafka-clientsartifactId>
    <version>2.0.0version>
dependency>

2、Yml文件配置

spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092 #服务器的ip及端口,可以写多个,服务器之间用“:”间隔

3、监听代码:

@KafkaListener(topics = "pp_kafka",groupId = "test-consumer-group")
public void listen (ConsumerRecord<?, ?> record) throws Exception {
    String json = (String) record.value();
    JSONObject jsonObject = JSONObject.parseObject(json);
    String sqlType = jsonObject.getString("type");
    JSONArray data = jsonObject.getJSONArray("data");
    for (int i=0;i<data.size();i++){
        JSONObject userJson = data.getJSONObject(i);
        String id = userJson.getString("Id");
        if("UPDATE".equals(sqlType) || "INSERT".equals(sqlType)){
            redisUtils.set(id,userJson.toJSONString());
            return;
        }
        else if("DELETE".equals(sqlType)){
            if(redisUtils.get(id)!=null)
                redisUtils.del(id);
            return;
        }
    }

你可能感兴趣的:(kafka,mysql,zookeeper,java)