概述
背景
oracle数据同步项目。在同步过程中偶发插入或者更新数据后数据立即会进行删除。导致同步失败;
基本技术架构
oracle触发器
进行数据的增删改查时将数据变更情况写入一张日志表
flume
采集日志表。使用sql插件
kafka
信息中间件
flink
进行流处理,使用侧输出流
问题
数据同步的逻辑是:
1.在kafka中获取到数据后使用测输出流进行分发
2.使用duutils进行数据连接管理 但是不是使用连接池来进行管理 只是使用queryrunneer进行数据库的增上改查 因为数据库连接池是由连接池进行管理连接的 自动管理过程中可能造成事务上的错误 所以自建连接来进行数据的增删改
3.每个事件中如果标识为delete的话会进行delete from …
而update以及insert 先用merge into 语句进行分流 再查询是否有相同数据 将相同数据进行排序 将除了第一条外的所有数据进行更改(改变同步标识。字段为1的话oracle触发器就会排除此条数据到日志表中,防止同步数据的无限循环)再删除上面更新的数据
问题描述
数据更新后可能会发生一个事件执行一条sql后插入了两条数据。那么这样的话就会造成删除操作
这种问题可能是网络或者其他问题 会造成这种哦仍然发生 具体原理不知
解决问题以及一些知识点
解决
在触发器中判断delete之前的标识 从源头停止删除后的继续同步
之前delete未进行标识判断
一些知识点
flink的并行度与kafka分区数量的对应关系:
查看源码可知 kafka的分区数会除以flink的并行度进行决定某个分区被哪个进程(消费者)消费。将并行度调整为和kafka分区数量一致 保持最好的性能
而生产者多个线程共享一个缓冲区进行发送数据
最后
以上就是飞快猎豹为你收集整理的记录一次flink消费kafka数据进行oracle数据同步问题的全部内容,希望文章能够帮你解决记录一次flink消费kafka数据进行oracle数据同步问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复