spring boot集成canal实现数据库同步,且mysql主库宕机canal自动切换到从库

本文介绍了如何在Spring Boot应用中集成Canal以实现数据库同步,同时配置Canal以在MySQL主库宕机时自动切换到从库。通过设置Canal的相关参数,如关闭自动提交偏移量,使用特定的反序列化方式,并配置监听器容器的线程数。此外,文章展示了CanalClient的代码实现,包括连接Canal服务器、数据库监听、SQL处理和异常处理,以及如何通过Kafka发送处理后的SQL语句。
摘要由CSDN通过智能技术生成

auto-offset-reset: earliest

是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量

enable-auto-commit: false

键的反序列化方式

key-deserializer: org.apache.kafka.common.serialization.StringDeserializer

值的反序列化方式

value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

listener:

在侦听器容器中运行的线程数。

concurrency: 5

#listner负责ack,每调用一次,就立即commit

ack-mode: manual_immediate

missing-topics-fatal: false

CanalClient.java 包含canal的连接,数据库的监听,日志数据的处理,sql的发送

package com.zks.canal.deploy;

import com.alibaba.fastjson.JSON;

import com.alibaba.otter.canal.client.CanalConnector;

import com.alibaba.otter.canal.client.CanalConnectors;

import com.alibaba.otter.canal.protocol.CanalEntry;

import com.alibaba.otter.canal.protocol.CanalEntry.Entry;

import com.alibaba.otter.canal.protocol.Message;

import com.google.protobuf.InvalidProtocolBufferException;

import com.zks.canal.producer.KafkaProducer;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.extern.slf4j.Slf4j;

import org.springframework.boot.ApplicationArguments;

import org.springframework.boot.ApplicationRunner;

import org.springframework.stereotype.Component;

import javax.annotation.Resource;

import java.net.InetSocketAddress;

import java.util.List;

import java.util.Queue;

import java.util.concurrent.ConcurrentLinkedQueue;

/**

  • @Package: com.zks.canal.deploy

  • @ClassName: CanalClient

  • @Author: ZhouKaiShun

  • @CreateTime: 2021/9/13 11:54

  • @Description: canal客户端

*/

@Component

@Slf4j

public class CanalClient implements ApplicationRunner {

@Resource

private KafkaProducer kafkaProducer;

private final static int BATCH_SIZE = 1000;

/**

  • sql队列

*/

private Queue SQL_QUEUE = new ConcurrentLinkedQueue<>();

/**

  • 订阅的数据库表

*/

public static String SUBSCRIBE_DB_TABLE = “kaishun.tb_user”;

@Override

public void run(ApplicationArguments args) throws Exception {

log.info(“启动canal服务,端口号:7111”);

// 创建链接

CanalConnector connector = CanalConnectors.newSingleConne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值