上篇文章讲述了如何安装oralce,现在oralce的条件已经满足了,接下来我们来安装debezium的三大件。
其实先非常简单,直接按照dbz的官方文档操作。首先下载官方的git文档。
https://github.com/debezium/debezium-examples.git
下载好了之后。进入文档内部。
cd debezium-examples/tutorial/
这个截图的意思是 要先下载一个 oralce 的jdbc的插件 还要自己创建一个文件夹去装。
去oralce的官方文档下载这个插件
点这里进入
下拉到这个位置进行下载
下载完之后我们要把他解压缩,并把文件夹命名为oracle_instantclient
注意这个文件夹下面一定有 odbjc.jar文件和xstreams.jar如果没有,说明你下错了。
接下来我们把这个文件夹放到debezium-with-oracle-jdbc这个文件夹下面。
先使用rz -y命令上传,再使用cp -r 命令放文件,不会用这个命令的去百度。
放好了之后继续
export DEBEZIUM_VERSION=1.2
这个命令是生成一个环境变量,因为等会运行的那个脚本里面用到了这个环境变量所以要先设置。
docker-compose -f docker-compose-oracle.yaml up --build
接下来使用docker-compose命令进行安装,就是build,里面会有一系列的操作,比如设置参数,变量,下载zookeeper,kafka,connect。等等,想知道具体做了什么,可以打开那个yaml文件看看,还有那个oracle-jdbc下面的DockerFile。
这里截图了DockerFile的一些代码,可以看看。
总之这样下来就全部运行起来了。
可以使用
docker ps
看下运行好的几个组件。
接下来继续
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" http://localhost:8083/connectors/ -d @register-oracle.json
这个代码是注册连接器,但是注册之前你一定要打开register-oracle.json这个json好好看看,因为他是按照这个json去注册的,所以你需要先打开
vi register-oracle.json
去编辑他,因为里面的oralce的服务器的ip需要改成你的安装oracle的ip,之前说了用两台服务器,oralce不在这台服务器上,所以需要改一下ip。
编辑好了之后就去注册连接器了。
curl -i -X GET -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/
这个命令是可以看看你注册了哪些连接器。
curl -i -X DELETE -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/inventory-connector
这个命令是把你注册的那个连接器删掉。
注册完了之后 我们去kafka那里看看有没有监听。
echo "INSERT INTO customers VALUES (NULL, 'John', 'Doe', '[email protected]');" | docker exec -i dbz_oracle sqlplus debezium/dbz@//localhost:1521/ORCLPDB1
上面这个命令就是往oralce服务器里面插入测试数据,当然因为oracle安装在另一台服务器上,所以你在那个服务器上执行这个,或者你用navicat都可以,反正就是加数据。
docker-compose -f docker-compose-oracle.yaml exec kafka /kafka/bin/kafka-console-consumer.sh \
--bootstrap-server kafka:9092 \
--from-beginning \
--property print.key=true \
--topic server1.DEBEZIUM.CUSTOMERS
这个命令就是打开你的kakfa消费者去监听这个topic的数据,也就是customers的数据。
当然你也可以使用
docker exec -it tutorial_kafka_1 bash
bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic server1.DEBEZIUM.CUSTOMERS --from-beginning
这两条命令去启动消费者。
但是这时候最大的坑出现了,你会发现他没有监听更改事件,仅仅是打印了表里的几条数据。
而且你不管怎么更改数据,消费者那边都没有任何反应。
我们来把这个代码JSON化一下。
确实只打印了 op=r的数据,了解结构的都知道,这是读取,包括新增,删除的事件都没有打印出来。这一度让我非常无解。
而且我翻阅了网络上的文档也没有任何结果。一切都是按照官方文档来的,按理来说不会有什么错误,所以为什么接收不到消息,我也不知道了。
如果把组件停掉,第二天再打开,他又会把最新的表的数据写进去,就是说新增的数据又接收到了,不知道什么情况,如果有兄弟遇到了我一样的情况,麻烦再下面留个言,一起探讨一下。
还有第二个坑就是这个组件的kafka或者kakfa connect经常会停掉,然后就需要重启。不知道是我服务器内存太小了还是怎么样。
后面解决了这个问题我在更新吧,最近被这个事情弄得特别头疼。
欢迎大家对dbz感兴趣的朋友加入咱们的QQ群一起探讨知识:
QQ群号:917686555