为什么不直接使用 canal 同步数据到redis中?
回答: 数据同步的代码和业务逻辑代码搅合在一起不方便维护。
目前cannal的最新版支持三种消息队列,kafka , rocketmq(有bug) rabbitMq 因此本文使用kafka作为mysql同步数据到redis的消息队列
kafka2.8以后的版本不在依赖zookeeper 本文采用kafka2.12的版本
配置mysql数据库 vim /etc/my.cnf
[mysqld]
log-bin = mysql-bin
binlog-format = ROW
搭建kafka 使用自带的kraft代替zookeeper
$ tar -xzf kafka_2.13-3.3.1.tgz
$ cd kafka_2.13-3.3.1/congfig/kraft/
修改配置 vim kraft/server.properties
node.id=1
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://localhost:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAI
log.dirs=/usr/local/script/kafka/logs/kraft_log/ #单机主要该这里 meta数据的存储位置
生成一个唯一集群id kafka3.x专有的 会生成uuid字符串
../../bin/kafka-storage.sh random-uuid
格式化操作,会在配置的kraft_log中出现一个meta表
../../bin/kafka-storage.sh format -t ODmFtRXAQl6zWiZfzSHkxw -c /usr/local/script/kafka/config/kraft/server.properties
启动kafka
./bin/kafka-server-start.sh -daemon config/kraft/server.properties 后台启动
./bin/kafka-server-start.sh config/kraft/server.properties 前端启动
创建一个topic topic名称为devops
./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic devops
查看kafka topic列表
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
查看topic名称为devops的消息内容
./kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic devops
验证是否消息可以正常生产与消费
创建生产者 输入hello
./kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic devops
重新开一个中端,创建消费者 并在消费端查看
./kafka-console-consumer.sh --bootstrap-server localhost:9092 -topic devops --from-beginning
至此kafka3.x搭建完毕