• Canal 与 Kafka 集成安装与配置


    Canal 与 Kafka 集成安装与配置

    vim 编辑中 >>> 后为列出原内容其后紧接的 <<< 行为对其的更改,没有前置符号的表示新添

    主机环境

    • CentOS 7.6 内存至少 1.5G,否则服务会启动不起来

    软件版本

    • MySQL 5.7.28
    • OpenJDK 8
    • Zookeeper 3.5.6-bin
    • Kafka 2.12(Scala)-2.3.0
    • Canal deployer-1.1.4

    MySQL 安装

    采用从官方源直接安装的方式

    • 添加 MySQL 5.7 官方源 rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
    • 更新源 yum -y update
    • 安装 MySQL 5.7 yum -y install mysql-community-server
    • 添加 Canal 所需 MySQL 配置 vim /etc/my.cnf [mysqld] 下新添配置
    log-bin=mysql-bin # 开启 binlog
    binlog-format=ROW # 选择 ROW 模式
    server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
    
    • 启动 MySQL systemctl start mysqld 查看状态 systemctl status mysqld
    • 查看生成的临时密码 cat /var/log/mysqld.log | grep 'temporary password'
    • 初次配置 mysql_secure_installation 按照提示完成配置
    • 测试中允许 root 远程连接并添加 Canal 所需的用户, mysql -uroot -p 后执行 SQL
    > USE mysql;
    > UPDATE user SET Host = '%' WHERE User = 'root';
    > CREATE USER canal IDENTIFIED BY 'Canal123!';
    > GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
    > FLUSH PRIVILEGES;
    > EXIT
    

    Java 安装

    采用从官方源直接安装的方式

    • 安装源中的 OpenJDK 8 yum install -y java-1.8.0-openjdk.x86_64
    • 验证安装 java -version

    Zookeeper 安装

    • https://zookeeper.apache.org/releases.html 中查找 zookeeper 最新 bin 版本压缩包的 HTTP 方式的下载链接
    • 下载压缩包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
    • 解压缩 mkdir -p tmp/zookeeper/ && tar zxvf apache-zookeeper-3.5.6-bin.tar.gz -C tmp/zookeeper/
    • 将解压缩后的软件移动至 /usr/local 下 mkdir /usr/local/zookeeper && mv tmp/zookeeper/apache-zookeeper-3.5.6-bin/* /usr/local/zookeeper/
    • 添加 zookeeper 环境变量 vim /etc/profile 末尾添加
    # Set zookeeper env
    export ZOOKEEPER_HOME=/usr/local/zookeeper/
    export PATH=$PATH:$ZOOKEEPER_HOME/bin
    
    • 使环境变量生效 source /etc/profile
    • 创建配置文件,从默认的配置文件创建,因为 zookeeper 启动时会去找 conf/zoo.cfg 作为配置文件
    cd /usr/local/zookeeper/
    cp conf/zoo_sample.cfg conf/zoo.cfg
    mkdir data
    
    • 编辑配置 vim conf/zoo.cfg,此处配置的是单机,如果需要配置集群也是在这里
    >>> dataDir=/tmp/zookeeper
    <<< dataDir=/usr/local/zookeeper/data # 这是 zookeeper 的数据目录
    admin.serverPort=2191 
    
    • 启动 zookeeper zkServer.sh start 查看状态 zkServer.sh status
    • 返回工作目录 cd -

    Kafka 安装

    • https://kafka.apache.org/downloads 中查找 kafka 最新版本的 HTTP 方式下载链接
    • 下载压缩包 wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz
    • 解压缩 mkdir tmp/kafka && tar zxvf kafka_2.12-2.3.0.tgz -C tmp/kafka
    • 将解压缩后的软件移动至 /usr/local 下 mkdir /usr/local/kafka && mv tmp/kafka/kafka_2.12-2.3.0/* /usr/local/kafka && cd /usr/local/kafka
    • 添加 kafka 环境变量 vim /etc/profile 末尾添加
    # Set Kafka env
    export KAFKA_HOME=/usr/local/kafka/
    export PATH=$PATH:$KAFKA_HOME/bin
    
    • 使环境变量生效 source /etc/profile
    • 修改配置文件 vim config/server.properties,配置集群的话还需要更改 broker.id
    >>> zookeeper.connect=localhost:2181 # 这里需要配置成 zookeeper 的地址,这里默认就是正确的
    >>> #listeners=PLAINTEXT://:9092
    <<< listeners=PLAINTEXT://:9092 # 删除前面的注释符号
    
    • 启动 Kafka 守护进程 kafka-server-start.sh -daemon config/server.properties &
    • 测试创建一个 topic kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 列出 topic kafka-topics.sh --list --zookeeper localhost:2181
    • 返回工作目录 cd -

    Canal 安装

    • https://github.com/alibaba/canal/releases 中查找 canal 最新deploy 版本的下载链接
    • 下载压缩包 wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
    • 解压 mkdir tmp/canal && tar zxvf canal.deployer-1.1.4.tar.gz -C tmp/canal/
    • 将解压后的文件复制进 /usr/local,mkdir /usr/local/canal && mv tmp/canal/* /usr/local/canal/
    • 创建测试配置直接使用自带的样例进行更改,并复制出默认配置以备后期增加库时使用,这里的每一个文件夹就代表一个数据源,多个数据源就复制出多个文件夹后在 canal.properties 的 canal.destinations 里逗号分隔进行配置 mv conf/example/ conf/test && cp conf/test/instance.properties instance.properties.bak
    • 修改单个数据源的配置 vim conf/test/instance.properties
    >>> canal.instance.master.address=127.0.0.1:3306 # 数据库服务器地址
    >>> canal.instance.dbUsername=canal # 数据库用户名
    >>> canal.instance.dbPassword=canal
    <<< canal.instance.dbPassword=Canal123! # 数据库密码
    >>> canal.instance.filter.regex=.*\..* # 数据表过滤正则,dbName.tbName,默认的是所有库的所有表
    >>> canal.mq.topic=example
    <<< canal.mq.topic=test # 这个数据库存储进 Kafka 时使用的 topic
    
    • 修改 Canal 全局设置 vim conf/canal.properties
    >>> canal.destinations = example
    <<< canal.destinations = test # 这里配置开启的 instance,具体方法上面步骤有说明
    >>> canal.serverMode = tcp
    <<< canal.serverMode = kafka # 更改模式,直接把数据扔进 Kafka
    >>> canal.mq.servers = 127.0.0.1:6667
    <<< canal.mq.servers = 127.0.0.1:9092 # Kafka 的地址
    >>> canal.mq.batchSize = 16384
    <<< canal.mq.batchSize = 16384 # 这里没有更改,值应该小于 Kafka 的 config/producer.properties 中 batch.size,但是 Kafka 里没设置,这里也就不更改了
    >>> canal.mq.flatMessage = false
    <<< canal.mq.flatMessage = true # 使用文本格式(JSON)进行传输,否则 Kafka 里扔进去的是二进制数据,虽然不影响,但是看起来不方便
    
    • 开启 Canal bin/startup.sh,因为 Canal 的脚本名称都太普通,所以没有添加到 PATH 里
    • 查看日志是否有异常 vim logs/canal/canal.log vim logs/test/test.log
    • 测试,连上数据库尝试执行更改 SQL
    CREATE DATABASE IF NOT EXISTS test;
    USE test;
    CREATE TABLE test_tb(
    	c1 INT COMMENT "中文测试",
    	c2 VARCHAR(36)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    • 查看 Kafka 中的数据,列出所有 topic,kafka-topics.sh --list --zookeeper localhost:2181,消费其中的数据 kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning 此时应该已经可以列出创建表时的语句

    后期 Bug 修复:

    1. 消费端 Kafka 不进数据,Canal 日志报错 org.apache.kafka.common.errors.RecordTooLargeException,认为是 Kafka 消息体大小限制造成的,需要同时修改 Kafka 与 Canal 消息体的最大限制
      • 修改 Kafka 配置,server.properties 中修改或添加配置项 message.max.bytes=100000000producer.properties 中修改或添加配置项 max.request.size=100000000consumer.properties 中修改或添加配置项 max.partition.fetch.bytes=100000000,重启 Kafka
      • 修改 Canal 配置,canal.properties 修改 canal.mq.maxRequestSize 参数值为 90000000,重启 Canal
      • 查看 Canal 日志是否报错 Could not find first log file name in binary log index file at... 如果报错则停止 Canal ,再删除实例配置下的 meta.dat 文件,再启动 Canal 即可
  • 相关阅读:
    vue.js3: 使用全局css样式文件(vue@3.2.37)
    vue.js3:多张图片转pdf(jspdf@2.5.1 / vue@3.2.37)
    技术解读:现代化工具链在大规模 C++ 项目中的运用 | 龙蜥技术
    项目环境稳定性指标建设之路
    从趋势到挑战,资深工程师一站式解读:操作系统运维和可观测性
    一文剖析PolarDB HTAP的列存数据压缩
    EasyCV DataHub 提供多领域视觉数据集下载,助力模型生产
    OpenKruise v1.3:新增自定义 Pod Probe 探针能力与大规模集群性能显著提升
    《领域驱动设计》:从领域视角深入仓储(Repository)的设计和实现
    基于IoT全链路实时质量魔洛哥
  • 原文地址:https://www.cnblogs.com/seliote/p/11721884.html
Copyright © 2020-2023  润新知