debezium docker订阅oracle 11g

news2024/12/25 9:10:35

debezium 依赖于kafka,kafka依赖于zookeeper。
zookeeper实现了kafka消息的一致性,debezium 把订阅的数据推送到kafka

dockerFile

FROM debezium/connect:1.6
ENV KAFKA_CONNECT_JDBC_DIR=$KAFKA_CONNECT_PLUGINS_DIR/kafka-connect-jdbc
ENV INSTANT_CLIENT_DIR=/instant_client/

USER root

USER kafka
# Deploy Oracle client and drivers

COPY instant_client/* $INSTANT_CLIENT_DIR
COPY instant_client/xstreams.jar /kafka/libs
COPY instant_client/ojdbc8.jar /kafka/libs

INSTANT_CLIENT_DIR 为oracleCilent,去官网下载即可,oracle11g的client是jdk8使用的,而debezium是jdk11, 这里我使用的是oracle12的client,测试可以使用

docker-compose 可根据github的推荐进行修改
https://github.com/debezium/debezium-examples/tree/master/tutorial

docker-compose.yaml

version: '2'
services:
  zookeeper:
    image: debezium/zookeeper:1.6
    ports:
     - 2181:2181
     - 2888:2888
     - 3888:3888
    volumes:
     - D://software\docker-volume\docker_debezium/volume:/volume
    privileged: true
    networks:
      proxy:
        ipv4_address: 192.168.192.3
  kafka:
    depends_on: 
      - zookeeper
    image: debezium/kafka:1.6
    ports:
     - 9092:9092
    links:
     - zookeeper
    environment:
     - ZOOKEEPER_CONNECT=zookeeper:2181
     - cluster.id=012344
    volumes:
     - D://software\docker-volume\docker_debezium/volume:/volume
     - D://software\docker-volume\docker_debezium/kafka/data:/kafka/data
     - D://software\docker-volume\docker_debezium/kafka/logs:/kafa/logs
    cap_add:
     - ALL # 开启全部权限
    privileged: true #设置容器的权限为root
    networks:
      proxy:
        ipv4_address: 192.168.192.4
  connect:
    depends_on: 
      - kafka
    image: debezium-connenct-oracle
    build:
      context: D:\software\docker-volume\docker_debezium
      dockerfile: dockerFile
      args:
        DEBEZIUM_VERSION: 1.6
    ports:
     - 8083:8083
     - 5005:5005
    links:
     - kafka
    environment:
     - BOOTSTRAP_SERVERS=kafka:9092
     - GROUP_ID=1
     - CONFIG_STORAGE_TOPIC=my_connect_configs
     - OFFSET_STORAGE_TOPIC=my_connect_offsets
     - STATUS_STORAGE_TOPIC=my_connect_statuses
     - LD_LIBRARY_PATH=/instant_client
     - KAFKA_DEBUG=true
     - DEBUG_SUSPEND_FLAG=n
     - JAVA_DEBUG_PORT=0.0.0.0:5005
    volumes:
     - D://software\docker-volume\docker_debezium/volume:/volume 
    privileged: true
    networks:
      proxy:
        ipv4_address: 192.168.192.5
  kafkaui:
    depends_on: 
      - kafka
    image: provectuslabs/kafka-ui:latest
    ports:
     - 8811:8080
    links:
     - kafka
    environment:
     - KAFKA_CLUSTERS_0_NAME=clusters
     - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
    networks:
      proxy:
        ipv4_address: 192.168.192.6
     

networks:
  proxy:
    ipam:
      config:
      - subnet: 192.168.192.0/20

注意要将kafka的data映射出去,因为kafka容器重新构建会丢失未消费的消息。
所有volumes的映射根据自己需求修改
kafka的cluster.id最好是随意写一个,这里把所有容器的网络ip都定义好,方便后面使用。
容器启动后即可访问kafkaUi

oracle执行下列语句用以支持订阅

ALTER TABLE 表名 ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

在这里插入图片描述
此时的kafka地址即为上面设置的192.168.192.4
使用postman或者curl给debezium发送创建连接器

http://localhost:8083/connectors/

{
  "name": "oracle-connector",
  "config": {
    "connector.class": "io.debezium.connector.oracle.OracleConnector",
    "database.hostname": "xxx",
    "database.port": "1521",
    "database.user": "xxx",
    "database.password": "xxx",
    "database.server.name": "xxx",
    "database.history.kafka.bootstrap.servers": "192.168.192.4:9092",
    "database.history.kafka.topic": "oracle-history",
    "topic.prefix":"prefix",
    "database.dbname":"xxx",
    "table.include.list": "你订阅的表",
    "snapshot.mode": "schema_only",
    "database.history.skip.unparseable.ddl":"true"
  }
}

接口返回为你的配置即配置成功

使用
get http://localhost:8083/connectors/${connector}/status 获取连接器运行状态
如上则是 http://localhost:8083/connectors/oracle-connector/status

备注
“snapshot.mode”: "schema_only"表示不同步表所有信息,只同步当前增量数据。
“database.history.skip.unparseable.ddl”:“true” 在对ddl语句解析失败时忽略,程序很容易j解析ddl异常如

 Ignoring unparsable DDL statement 'alter table SYSTEM.LOGMNR_TABCOMPART$ modify partition P470 REBUILD UNUSABLE LOCAL INDEXES;': {}   [io.debezium.connector.oracle.OracleSchemaChangeEventEmitter]

io.debezium.text.ParsingException: DDL statement couldn't be parsed. Please open a Jira issue with the statement 'alter table SYSTEM.LOGMNR_TABCOMPART$ modify partition P470 REBUILD UNUSABLE LOCAL INDEXES;'

而异常后连接器会直接挂掉,配置忽略后异常不会挂而是忽略此错误

至此配置完成,进入kafkaui查看数据
在这里插入图片描述
有一个以你设置的前缀开头的和你表名结尾的队列即为你订阅的表,如上配置则为
prefix.你订阅的表
你对表 insert、update、delete的数据全部同步至此,消息包含before、after字段用以对比更改前后数据。

kafka 的配置修改 connect-distributed.properties

key.converter.schemas.enable=false
value.converter.schemas.enable=false

用以精简json

至此搭建已完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

登陆拼多多获取整站实时商品详情数据,商品列表,商品优惠券,包括数据采集,清洗,分析,封装等过程,作为爬虫的课程。

前言 拼多多平台是一个众所周知的一个电商平台,基本上什么都能找到,而且价格比较优惠。 想业余做电商赚点小钱或买点东西,就需要对比平台上各个卖家的商品信息,所谓货比三家,为商品定一个合理的价位或淘一个合理&…

[Python基础] 学生管理系统(存储读取学生信息)

学生管理系统:应该算是语言语法学习过程中一个比较适合测试语法熟练度的代码案例了。 文章目录 思路main(入口函数)menu(菜单)Add(新增学生)Display()(显示学生)Find()&a…

::before和::after伪元素的用法案例

CSS3中伪类采用单冒号写法,伪元素采用双冒号写法。 伪类举例——:hover,:link,:active,:target。 伪元素举例——::before,::after,::first-letter,::first-line,::selection。 一、介绍 今天写网页时遇到一个问题,视口的背景中插入一个小图标的话&a…

Python进阶项目--只因博客(bootstrap+flask+mysql)

前言 1.全民制作人们大家好,我是练习时长两年半的个人练习生只因坤坤,喜欢唱,跳,rap,篮球,music......在今后的节目中,我还准备了很多我自己作词、作曲、编舞的原创作品,期待的话&am…

VirtualBox虚拟机后台运行

前言 在Windows下的VirtualBox运行如Linux的虚拟机时,并不需要图形化的界面,我们不必次次通过VirtualBox的官方界面进入,解决鼠标键盘定位等问题。可以通过Putty等软件使用SSH进行连接控制,但是官方界面并没有在后台运行选项。 需…

Nginx快速上手~

注:本文针对官网的快速入门教程进行一个中文的解释,以帮助英文阅读能力较差的学习者快速上手 参考官网连接Beginners Guide (nginx.org) Centos下的安装 sudo yum install yum-utils # 创建文件 vim /etc/yum.repos.d/nginx.repo # 输入以下内容 ####…

项目1实现登录功能方案设计第四版

需求 优化点:MySQL表常用功能模块实现方案 index页面home页面 需求 实现一个登录功能 实现的功能 注册(邮箱注册) 登录(邮箱密码) 重置密码 查看操作记录(登录, 注册, 重置密码, 登出. 都算操作) 登出 在第3版的基础上进行优化:\ 优化点: 接口设计 1. 发送注册验证码: 路径: PO…

五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同

近日,为规范旅游市场秩序,促进旅行社高质量发展,文旅部发布了《文化和旅游部办公厅关于进一步规范旅游市场秩序的通知》(下称《通知》),对旅游业提出了新的要求。 《通知》中规范了旅行社经营行为。旅行社要…

flink任务处理下线流水数据,数据遗漏不全(三)

flink任务处理下线流水数据,数据遗漏不全(二) 居然还是重量,做一个判断,如果是NaN 就直接获取原始的数据的重量 测试后面会不会出现这个情况! 发现chunjun的代码运行不到5h以后,如果网络不稳…

EasyCVR平台基于GB28181协议的语音对讲配置操作

EasyCVR基于云边端协同,具有强大的数据接入、处理及分发能力,平台可支持海量视频的轻量化接入与汇聚管理,可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等功能…

IT行业里的热门技术

© Ptw-cwl 文章目录 1. 人工智能(AI)和机器学习(ML)2. 大数据3. Web2.04. 移动应用程序开发5. 物联网6. 云计算7. 区块链8. 5G技术9. 虚拟现实(VR)和增强现实(AR) 现在如果问…

如何使用Midjourney辅助建筑设计,常用的提示和使用效果展示(内附Midjourney提示词网站)

文章目录 一.Midjourney建筑设计的提示技巧1. prompt模板12.prompt模板2 二、著名建筑师为例1.Zaha Hadid(扎哈哈迪德)2.Ludwig Mies van der Rohe(路德维希密斯凡德罗)3.Renzo Piano(皮亚诺)4.Stefano Boe…

PEIS源码,体检管理系统源码,C#医院体检系统源码

PEIS体检管理系统源码,医院体检系统源码PEIS源码,商业级源码,有演示。 PEIS医院体检管理系统采用C/S结构,前台开发工具为Vs2012,后台数据库采用oracle大型数据库。核心功能有:体检档案的录入、体检报告的输…

从入门到精通:SEO站外优化全面解析

通过​​第三章​​上下连续两期的干货内容,相信你已经掌握了 SEO 优化的基本方法,但你有没有发现:之前的内容都是针对网站本身进行优化的方法,其实,SEO 还有相当一部分功夫要放在站外优化上。 问题来了:站…

上海震坤行工业超市聚焦量具量仪市场,助力企业实现测量数字化

上海震坤行工业超市聚焦量具量仪市场,助力企业实现测量数字化 近日,量具量仪三大品牌哈量、广陆、英示的三位重磅嘉宾及震坤行磨具量具产线总经理,走进震坤行工业超市直播间。带来了一场“聚焦量具量仪市场,助力企业实现测量数字…

C语言中结构体(struct)的详细分解与使用

目录 第一:结构体的定义 第二:规则 第三:结构体声明 第四:C 语言结构体定义的三种方式 第五:对于结构体变量的初始化 第六:整体与分开 第七:结构体长度 第八:嵌入式开发中&am…

第 三 章 UML 类图

文章目录 前言一、依赖关系(虚线箭头)二、泛化关系:继承(实线空心箭头)三、实现关系(虚线空心箭头)四、关联关系(一对一为实线箭头,一对多为实线)五、聚合关系…

如何实现24小时客户服务

许多企业都有着这样的愿望:在不增加客服人员的同时能实现24小时客户服务。 那么有没有什么方法可以实现这一想法呢?在想解决方案之前我们可以先来谈谈客服的作用。 客服的作用主要为以下2点: 帮助用户更快地了解产品(减轻产品的…

Linux常用基础指令大全

在使用Aistudio平台学习PaddlePaddle时,常常会用到linux指令,对于之前没有学习过linux指令的我来说,确实有点难度,在学习了一段时间之后,慢慢也适应了linux指令,这一篇博客主要记录linux中的常用指令。以AI…

typescipt的运行环境搭建

1.安装node 官网地址:https://nodejs.org/en 2.安装完成后,运行node -v 检测安装版本 3.全局安装typescipt npm i typescipt -g 用tsc检测是否安装好 创建一个demo.ts文件 在终端运行tsc demo.ts会出现错误 找到windows powershell以管理员身份运行…