前言
博主全程root用户操作,不是root请加sudo
一、部署所需
1.Oracle(教程)
2.Kafka(教程)
3.java(教程)
二、环境配置
systemctl disable --now firewalld # 防火墙关闭,如果是云服务器安全组记得放行
setenforce 0 # selinux关闭
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
yum install wget tar vim net-tools curl -y # 常用插件安装
三、部署流程
1.下载kafka-connect及存放
官网是要打包的,我已经打包好了,百度云拿就可以了,提取码:qv42
mkdir /data/kafka/kafka_2.13-2.6.0/lib #存放kafka-connect-oracle-1.0.68
/data/kafka/kafka_2.13-2.6.0/libs存放slf4j-api-2.0.0-alpha0.jar,jsqlparser-1.2.jar,ojdbc7.jar
/data/kafka/kafka_2.13-2.6.0/config存放OracleSourceConnector.properties
2.数据库配置
开启数据库archivelog并开启日志补充记录:
su - oracle
sqlplus / as sysdba
shutdown immediate
startup mount
alter database open;
shutdown immediate
startup mount
alter database archivelog; #开启数据库archivelog模式
alter database add supplemental log data (all) columns; #启动日志补充记录
创建用户赋予权限使kafka-connect可以访问:
create role logmnr_role;
grant create session to logmnr_role;
grant execute_catalog_role,select any transaction ,select any dictionary to logmnr_role;
create user kafka identified by kafkapass;
grant logmnr_role to kafka;
alter user kafka quota unlimited on users;
3.配置文件修改
修改connect-standalone.properties配置文件:
vim /data/kafka/kafka_2.13-2.6.0/config/connect-standalone.properties #修改下面这一条,其他默认
plugin.path=/data/kafka/kafka_2.13-2.6.0/lib
修改OracleSourceConnector.properties配置文件:
vim /data/kafka/kafka_2.13-2.6.0/config/OracleSourceConnector.properties #除了有注释,其他全部默认即可
name=oracle-logminer-connector
connector.class=com.ecer.kafka.connect.oracle.OracleSourceConnector
db.name.alias=KAFKA #别名,随便填即可
tasks.max=1
topic=test #同步到的topic名,如果不存在会自动生成
db.name=ORCL
db.hostname=数据库ip
db.port=1521
db.user=kafka
db.user.password=kafkapass
db.fetch.size=1
table.whitelist=数据库名.表名 #白名单,不能为空,要同步的数据库名和表名,可用test.*代表test数据库的所有表格
table.blacklist= #黑名单,没有需求为空即可
parse.dml.data=true
reset.offset=false
multitenant=false
配置项官方说法:
名称 | 类型 | 描述 |
---|---|---|
name | string | 连接器名称 |
connector.class | string | 此连接器的Java类的名称 |
db.name.alias | string | 数据库的标识符名称(例如Test,Dev,Prod)或用于标识数据库的特定名称。此名称将用作主题和架构名称的标头 |
task.max | Integer | 创建的最大任务数。此连接器使用单个任务 |
topic | string | 消息将被写入的主题的名称。如果设置了一个值,则所有消息都将被写入此声明的主题(如果未设置),则将为每个数据库表动态创建一个主题 |
db.name | string | 要连接的数据库的服务名称或sid。通常使用数据库服务名称。 |
db.hostname | string | Oracle数据库服务器的IP地址或主机名。 |
db.port | Integer | Oracle数据库服务器的端口号。 |
db.user | string | 用于连接到数据库以启动和执行logminer的数据库用户的名称。该用户必须提供上述必要的特权。 |
db.user.password | string | 数据库用户密码。 |
db.fetch.size | Integer | 此配置属性设置Oracle行提取大小值。 |
table.whitelist | string | 用逗号分隔的将要捕获的数据库模式或表名称的列表。对于所有架构捕获。* 对于表捕获。必须指定。 |
table.blacklist | string | 用逗号分隔的数据库模式或表名列表,将不会捕获。对于所有架构捕获。* 对于表捕获。必须指定。 |
parse.dml.data | boolean | 如果为true,则捕获的sql DML语句将解析为字段和值;如果为false,则仅发布sql DML语句。 |
reset.offset | boolean | 如果为true,则在连接器启动时将偏移值设置为数据库的当前SCN。如果为false,则连接器将从上一个偏移值开始。 |
start.scn | long | 如果设置为,则将偏移值设置为该指定值,并且logminer将从此SCN启动。如果连接器希望从所需的SCN启动,则可以使用此属性 |
multitenant | boolean | 如果为true,则启用多租户支持。如果为false,将使用单实例配置。 |
4.启动
cd /data/kafka/kafka_2.13-2.6.0
./bin/connect-standalone.sh ./config/connect-standalone.properties ./config/OracleSourceConnector.properties
三、测试
oracle添加数据:
su - oracle
sqlplus / as sysdba
conn 账号/密码 #连接数据库
insert into 表名(字段) values(内容) #添加数据
kafka查看数据是否同步:
su - root
cd /data/kafka/kafka_2.13-2.6.0
./bin/kafka-topics.sh --list --zookeeper localhost:2181 #查看所有的topic
#应该除了同步的topic,会多出3个topic
#connect-configs
#connect-offsets
#connect-status
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic名 --from-beginning #进入数据同步的topic查看历史记录