Canal が MySQL データを Kafka に監視する詳細な手順 (jdk+zookeeper+kafka+canal+mysql)

I.はじめに

以下の手順は、仮想マシンを介して単一ノードの jdk+zookeeper+kafka+canal+mysql クラスター環境を構築するもので、構築完了後は、mysql データベースのデータを canal 経由で監視し、kafka に送信できるようになります。
mysql-カナル-カフカ

2. 環境整備

環境: 仮想マシン centos7 は
全体的に root 操作権限を持っています。
仮想マシンなのでファイアウォールを直接オフにします。サーバーの場合は、指定されたポートのみを開くことをお勧めします (一部のセキュリティ設定が必要であることに注意してください) 1. 仮想マシンでターミナル
を開いて IP を表示します。

ifconfig

2. xshell を使用して仮想マシンに接続します。
3. ファイアウォールをオフにします。

systemctl stop firewalld # 关闭防火墙
补充:
systemctl status firewalld # 查看防火墙状态
systemctl start firewalld # 打开防火墙
systemctl restart firewalld # 重启防火墙

3.JDKのインストール

1.デフォルトでインストールされているJDKがあるかどうかを確認します

java -version

2. デフォルトでインストールされている JDK をアンインストールします

yum list installed | grep java # 查询已安装的jdk信息
yum -y remove 自带openjdk # 卸载

3. インストールパッケージとインストール場所を置くフォルダーを作成します。

cd /
mkdir app
cd app
mkdir installationPackage #放安装包
cd ../
mkdir path # 安装位置

4. 使用した圧縮パッケージを xftp 経由でサーバーの /app/installationPackage ディレクトリにアップロードします。
5. jdk を /app/path ディレクトリに解凍します。

tar -zxvf /app/installationPackage/jdk-8u221-linux-x64.tar.gz -C /app/path

6. /app/path ディレクトリに入り、jdk1.8.0_221 フォルダの名前を jdk に変更します。

mv jdk1.8.0_221 ./jdk

7. 環境変数を構成する

vim /etc/profile

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

# java 环境变量
export JAVA_HOME=/app/path/jdk
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

8. 環境変数を有効にする

source /etc/profile

9. jdkが正常にインストールされているかどうかをテストする

java -version

4.zookeeperのインストール

1. Zookeeper 圧縮パッケージを /app/installationPackage ディレクトリに転送します。
2. /app/path ディレクトリに解凍します。

tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C ../path/

3. /app/path ディレクトリに入り、apache-zookeeper-3.5.9 の名前を Zookeeper に変更します。

cd /app/path
mv apache-zookeeper-3.5.9 /zookeeper

4. /app/path/zookeeper/conf ディレクトリに移動し、zoo_sample.cfg ファイルをコピーして、zoo.cfg ファイルに名前を変更します。

cd /app/path/zookeeper/conf
cp zoo_sample.cfg zoo.cfg

5.zoo.cfgファイルを変更します。

vim zoo.cfg

データディレクトリを変更する

dataDir=/app/path/zookeeper/data
# 在文件最下方加如下内容
server.0=localhost:2888:3888

1. dataDir: インメモリ データベース スナップショットが保存される場所。特に指定がない限り、データベース更新のトランザクション ログを指します。注: ログを保存する場所は慎重に選択する必要があります。専用のログ ストレージ デバイスを使用すると、システムのパフォーマンスが大幅に向上します。使用中のストレージ デバイスにログが保存されると、システムのパフォーマンスに大きな影響が生じます。
2.server.A=B:C:D
  A: ここで、A はサーバーの番号であることを示す数値、
  B: サーバーの IP アドレス、
  C: Zookeeper サーバー間の通信ポート、
  D:リーダー選挙ポート。
 最初に変更する必要があるのは dataDir で、指定された場所にディレクトリを作成します。
 2 番目に追加する必要があるのは、server.A=B:C:D 構成です。ここで、A は、以下で紹介する myid ファイルに対応します。B はクラスターの IP アドレス、C:D はポート構成です。

6. /app/path/zookeeper ディレクトリ (zoo.cfg で指定された dataDir パス) にデータ フォルダーを作成します。

mkdir data

7. dataDir で指定したフォルダー (/app/path/zookeeper/data) を入力します。

vim myid
# 按i进入insert模式并输入zoo.cfg中server的数字
0

myid は、zk クラスターが相互に検出するために使用する識別子です。作成する必要があり、同じにすることはできません。

8. 環境変数を構成する

vim /etc/profile

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

# zookeeper环境变量
export ZK_HOME=/app/path/zookeeper
export PATH=$PATH:$ZK_HOME/bin

9. 環境変数を有効にする

source /etc/profile

10. ズーキーパーを開始する

zkServer.sh start
补充:
zkServer.sh start # 启动
zkServer.sh stop # 停止
zkServer.sh restart # 重启
zkServer.sh status  # 查看节点状态

11. Zookeeper が正常に起動したかどうかを確認します

zkServer.sh status

単一ノードはスタンドアロンで表示され、クラスターはリーダーまたはフラワーを表示します。

jps
#QuorumPeerMain 表示zookeeper在运行

5.Kafkaをインストールする

1. kafka 圧縮パッケージを /app/installationPackage ディレクトリに配置します。
2. /app/path ディレクトリに解凍します。

tar -zxvf kafka_2.13-2.7.0.tgz -C ../path/

3. /app/path ディレクトリに入り、kafka_2.13-2.7.0 の名前を kafka に変更します。

cd /app/path
mv kafka_2.13-2.7.0/ kafka

4. 設定ファイル (server.properties) を変更します。 注: 順序 (上から下へ検索してください)

broker.id=0 # 对应zookeeper的myid
listeners=PLAINTEXT://localhost:9092
log.dirs=/app/path/kafka/data
log.retention.hours=1
log.cleanup.policy=delete
zookeeper.connect=localhost:2181

イントラネットに Kafka クラスターをデプロイする場合は、リスナーのみが必要です。内部ネットワークと外部ネットワークを区別する必要がある場合は、Advertized.listeners が必要です。
リスナー: リスナーは、指定されたホスト名と開いているポートで Kafka サービスにアクセスするために使用するプロトコルを外部コネクタに伝えるために使用されます。
adsd.listeners: リスナーよりもアドバタイズされるものが 1 つあります。アドバタイズとは、宣言および公開されることを意味します。つまり、グループ リスナーはブローカーによって外部リリースに使用されます。
Advertise_listeners は外部に公開されるサービス ポートであり、リスナーは実際に接続を確立するために使用されます。

5. /app/path/kafka/bin/ ディレクトリ内の Kafka ログ ストレージ アドレスを入力して変更します。

vim kafka-run-class.sh

以下の内容を修正します

LOG_DIR=/app/path/kafka/logs

6. /app/path/kafka/config ディレクトリに入り、kafka 接続コンポーネントを構成します。

vim connect-distributed.properties

以下の内容を修正します

bootstrap.servers=localhost:9092
rest.port=8083
rest.advertised.port=8083
plugin.path=/app/path/kafka/connect # kafka connect插件路径

7. 環境変数を構成する

vim /etc/profile

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

#KAFKA环境变量
export KAFKA_HOME=/app/path/kafka
export PATH=$PATH:$KAFKA_HOME/bin

8. 環境変数を有効にする

source /etc/profile

9. カフカを開始する

kafka-server-start.sh -daemon /app/path/kafka/config/server.properties

10.kafka接続を開始する

connect-distributed.sh -daemon /app/path/kafka/config/connect-distributed.properties

11. 起動が成功したかどうかを確認する

jps
#kafka 表示kafka启动成功
#ConnectDistributed 表示kafka connect启动成功


12. Kafka作成トピックをテストするためのプロデューサーとコンシューマーを作成する

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 -topic 主题名称

プロデューサーの作成

kafka-console-producer.sh --broker-list localhost:9092 --topic 主题名称

コンシューマの作成

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic 主题名称

6.MySQLをインストールする

1. 既存の mysql をアンインストールします

# 检查 MariaDB 是否安装
yum list installed | grep mariadb
# 卸载全部 MariaDB 相关
yum -y remove mariadb*
# 查看已经安装的服务
yum list installed | grep -i mysql   # -i 无论大小写
# 删除查出来的服务(去掉后缀)
yum -y remove myql名字 
# 查看残留的目录:
whereis mysql
# 删除相关文件:
rm –rf /usr/lib64/mysql
rm –rf /usr/my.cnf
rm -rf /var/lib/mysql
# 如果这个目录如果不删除,再重新安装之后,密码还是之前的密码,不会重新初始化!

2. mysql 圧縮パッケージを /app/installationPackage ディレクトリに配置します
3. mysql 圧縮パッケージを /usr/local ディレクトリに抽出します。

tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar -C /usr/local

4. /usr/local ディレクトリに入り、mysql-5.7.26-linux-glibc2.12-x86_64 の名前を変更します。

cd /usr/local
mv mysql-5.7.26-linux-glibc2.12-x86_64 mysql

5. mysqlユーザーグループとユーザーを作成します

groupadd mysql
useradd -r -g mysql mysql

6. データ ディレクトリを作成し、権限を付与します。

mkdir -p  /data/mysql              #创建目录
chown mysql:mysql -R /data/mysql   #赋予权限

7. my.cnf を構成する

vim /etc/my.cnf

i を押して挿入モードに入り、ファイルを入力します。

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

8. /usr/local/mysql/bin/ ディレクトリに入り、データベースを初期化します。

cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize

9. パスワードを表示する

cat /data/mysql/mysql.err

10. mysql.server を /etc/init.d/mysql に配置し、次のコマンドを使用して mysql を起動/停止します。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

11.mysqlを起動します

service mysql start # 启动mysql
补充:
service mysql stop # 停止mysql
service mysql restart # 重启mysql

「Starting MySAL...SUCCESS!」と表示され、インストールが成功したことが示されます。

12.mysqlにログインします

./mysql -u root -p   #bin目录下
# 输入上面拿到的初始密码

13. デフォルトのパスワードを変更する

SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;   # 刷新使其生效

14. リモートアクセスを有効にする

use mysql  #进入到mysql库中
update user set host = '%' where user = 'root';  # 使root能再任何host访问
FLUSH PRIVILEGES; # 刷新

15. mysql コマンドを実行するために mysql の bin ディレクトリに移動せずにソフト リンクを作成します。

ln -s  /usr/local/mysql/bin/mysql    /usr/bin

この時点で、データベース ツールを介してデータベースに接続できるようになります。

16. この時点で、データベース内に新しいデータベースを作成し、後で監視するテーブルとしてデータベースの下に新しいテーブルを作成できます。

7. canal サーバーをインストールします (canal は mysql データを監視し、kafka に送信します)。

1. canal 圧縮パッケージを /app/installationPackage ディレクトリに配置します
2. /app/path/ ディレクトリに入り、canal_server フォルダーを作成します。

cd /app/path
mkdir canal_server

3. /app/path/canal_server ディレクトリに解凍します。

tar -zxvf canal.deployer-1.1.4.tar.gz -C ../path/canal_server

4. myql の Binlog 書き込み機能を有効にし、binlog-format を ROW モードに設定します。

vim /etc/my.cnf

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

注: Alibaba Cloud RDS for MySQL の場合、binlog はデフォルトでオンになっており、アカウントにはデフォルトで binlog dump 権限があります。権限や binlog 設定は必要ありません。この手順は直接スキップできます。

5. canal に MySQL へのリンクを許可します。アカウントには、MySQL スレーブとして機能する権限があります。すでにアカウントをお持ちの場合は、直接付与できます。

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; #账号密码都为canal
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES; # 刷新

ここでは、変更が有効にならないように mysql サービスを再起動することをお勧めします。

6. 監視設定の変更

vim /app/path/canal_server/conf/example/instance.properties

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

canal.instance.master.address = localhost:3306 # 数据库地址
canal.instance.dbUsername = canal  # 数据库账号
canal.instance.dbPassword = canal  # 数据库密码
canal.instance.filter.regex = 数据库名.要监控的表名

構成内のデフォルトの Kafka トピックは例であり、自分で変更できます。デフォルトのトピックを使用する場合は、忘れずにこのトピックを kafka で作成してください。

7. Kafka 関連の構成を変更する

vim /app/path/canal_server/conf/canal.properties

i を押して挿入モードに入り、ファイルの最後に Enter を押します。

canal.serverMode = kafka # 发送到kafka
canal.mq.servers = localhost:9092 # kafka集群地址

8. /app/path/canal_server/bin ディレクトリに入ります。

sh ./startup.sh # 启动
sh ./stop.sh # 停止

8. データが監視できるかどうかをテストする

1. 事前に mysql データベースに新しいデータベースと追加するテーブルを作成し、それを canal の instance.properties に入力しました。

2. 新しい Kafka トピックを作成する

kafka-topics.sh --create --zookeeper 你的ip:2181 --replication-factor 3 --partitions 1 -topic 主题名称

3. Kafka コンシューマを作成する

kafka-console-consumer.sh --bootstrap-server 你的ip:9092 --topic 主题名称

4. 監視するテーブルのデータの追加、変更、削除、およびテーブル構造の変更

5. Kafka コンシューマーは対応するデータを送信します

9. 結論

上記の Kafka コンシューマーがテーブルへの追加、削除、変更を送信できる場合は、おめでとうございます。以上の環境設定が完了しました。拍手を送りましょう。

勉強期間が浅いため、施工の過程で多くの問題や落とし穴に遭遇しましたが、自分自身の学習の記録として、施工手順をできるだけ詳しく記録しました。困っている人を助けてください。
上記の手順でご質問や追加が必要な場合は、お気軽にアドバイスをいただければ幸いです。最後に、皆さんの仕事の成功と願いがすべて叶うことを祈っています。

おすすめ

転載: blog.csdn.net/weixin_55549435/article/details/123309631