otter mysql hbase_otter自定义扩展

article/2025/10/20 13:21:20

otter自定义扩展

otter支持数据处理自定义过程。

Extract模块:

EventProcessor : 自定义数据处理,可以改变一条变更数据的任意内容

FileResolver : 解决数据和文件的关联关系

目前两者都只支持java语言编写,但都支持运行时动态编译&lib包载入的功能。

通过Otter Manager直接发布source文件代码,然后推送到node节点上即时生效,不需要重启任何java进程,有点动态语言的味道

可以将class文件放置到extend目录或者打成jar包,放置在node启动classpath中,也可以通过Otter Manager指定类名的方式进行加载,这样允许业务完全自定义。(但有个缺点,如果使用了一些外部包加入到node classpath中,比如远程接口调用,目前EventProcessor的调用是串行处理,针对串行进行远程调用执行,效率会比较差. )

数据处理扩展的示例代码

场景一:根据业务逻辑判断是否同步该条数据

package com.alibaba.otter.node.extend.processor;

import com.alibaba.otter.shared.etl.model.EventColumn;

import com.alibaba.otter.shared.etl.model.EventData;

import org.apache.commons.lang.StringUtils;

public class TestEventProcessor extends AbstractEventProcessor {

public boolean process(EventData eventData) {

boolean isHandle = true;

if(StringUtils.equals("test_all", eventData.getTableName())){

EventColumn eventColumn = getColumn(eventData , "type");

//如果类型是2的话则忽略

//可以类比 如果不是需要同步的数据,则忽略同步

if("2".equals(eventColumn.getColumnValue())){

isHandle = false;

}

}

return isHandle;

}

}

场景二:自定义数据处理逻辑,包括读库操作(实现DataSourceFetcherAware接口)

package com.alibaba.otter.node.extend.processor;

import com.alibaba.otter.shared.etl.extend.processor.support.DataSourceFetcher;

import com.alibaba.otter.shared.etl.extend.processor.support.DataSourceFetcherAware;

import com.alibaba.otter.shared.etl.model.EventColumn;

import com.alibaba.otter.shared.etl.model.EventData;

import org.apache.commons.lang.StringUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.sql.DataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

public class TestEventProcessor extends AbstractEventProcessor implements DataSourceFetcherAware {

private final static Logger logger = LoggerFactory.getLogger(TestEventProcessor.class);

protected DataSource dataSource;

public boolean process(EventData eventData) {

boolean isHandle = true;

if(StringUtils.equals("test_all", eventData.getTableName())){

EventColumn typeColumn = getColumn(eventData , "type");

//如果类型是2的话则忽略

//可以类比 如果不是需要同步的数据,则忽略同步

if("2".equals(typeColumn.getColumnValue())){

isHandle = false;

}else {

try {

Connection conn = this.dataSource

.getConnection();

//去操作该数据库里的其他表获取关联字段

ResultSet set =conn.prepareStatement("SELECT * FROM `test`.`main` WHERE 1")

.executeQuery();

//自定义修改数据

if(set.next()){

EventColumn titleColumn = getColumn(eventData , "title");

titleColumn.setColumnValue(titleColumn.getColumnValue() + set.getString("name"));

}

//释放资源

set.close();

conn.close();

} catch (SQLException e) {

logger.error(e.getMessage());

}

}

}

return isHandle;

}

@Override

public void setDataSourceFetcher(DataSourceFetcher dataSourceFetcher) {

//这里是表的id,也就是源数据库里的某个表

this.dataSource = dataSourceFetcher.fetch(new Long(3));

}

}

————————————————

扩展性定义

按照实现不同,可分为两类:

数据处理自定义,比如Extract , Transform的数据处理. 目前Select/Load不支持数据自定义处理

组件功能性扩展,比如支持oracle日志获取,支持hbase数据输出等.

数据处理自定义

Extract模块:

EventProcessor : 自定义数据处理,可以改变一条变更数据的任意内容

FileResolver : 解决数据和文件的关联关系

目前两者都只支持java语言编写,但都支持运行时动态编译&lib包载入的功能。

通过Otter Manager直接发布source文件代码,然后推送到node节点上即时生效,不需要重启任何java进程,有点动态语言的味道

可以将class文件放置到extend目录或者打成jar包,放置在node启动classpath中,也可以通过Otter Manager指定类名的方式进行加载,这样允许业务完全自定义。(但有个缺点,如果使用了一些外部包加入到node classpath中,比如远程接口调用,目前EventProcessor的调用是串行处理,针对串行进行远程调用执行,效率会比较差. 如有并行处理需求,请联系我,可增加此功能)

7c20a1103b9b764823be654c5f719509.png

EventProcessor接口示例:

/**

* 业务自定义处理过程

*

* @author jianghang 2012-6-25 下午02:26:36

* @version 4.1.0

*/

public interface EventProcessor {

/**

* 自定义处理单条EventData对象

*

* @return {@link EventData} 返回值=null,需要忽略该条数据

*/

public EventData process(EventData eventData);

}

组件功能性扩展

目前这块扩展性机制不够,设计时只预留了接口,但新增一个功能实现,需要通过硬编码的方式去进行,下载otter的源码,增加功能支持,修改spring配置,同时修改web页面,方便使用。

基于manager的灵活扩展性的实现,暂没有想到很好的办法,如果你有好的思路和实现方式,也可以告知我们,谢谢。

比如举增加hbase load实现为例,需要扩展的内容:

增加hbase数据源的抽象

增加hbase表的抽象,比如column,columnFamily

增加hbase transform的实现

增加hbase loader的实现

https://www.it610.com/article/2557050.htm

https://blog.csdn.net/u013705066/article/details/86471149


http://chatgpt.dhexx.cn/article/TA2QaNwy.shtml

相关文章

otter搭建

一、安装zookeeper的单机版 apache-zookeeper-3.6.1-bin.tar.gz 如果下载的是3.5及以后的,需要下载包名带有-bin的版本,从3.5.5开始,带有bin的包才是解压以后可以直接使用的里面有编译后二进制的包,而之前的普通的tar.gz里面只是…

otter安装

译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统 otter的环境需要:mysql,jdk&#x…

Otter 安装部署维护

介绍 淘宝开源的产品,基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,一个分布式数据库同步系统。 目前同步规模: 同步数据量6亿 文件同步1.5TB(2000w张图片) 涉及200个数据库实例之间的同步 80台机器…

Otter配置说明

Otter配置说明 标签: Otter 下载 最新版Otter下载地址 CSDN下载地址 需要下载manager.deployer-4.2.13.tar.gz,node.deployer-4.2.13.tar.gz和Source code (zip) 需要安装zookeeper和jdk支持,canal已经内置,不需要安装 manage…

mysql otter_MySQL数据库实现远程同步的工具alibaba otter

MySQL数据库实现远程同步的工具alibaba otter 发布时间:2020-06-03 15:46:57 来源:51CTO 阅读:291 作者:三月 本篇文章给大家主要讲的是关于MySQL数据库实现远程同步的工具alibaba otter的内容,感兴趣的话就一起来看看…

Otter源码深入详解(三)

分析Node的代码前,需要理解Node的工作机制,需要先了解其工作原理: https://github.com/alibaba/otter/wiki/Otter调度模型 这里用到了SEDA模型,SEDA模型这里有偏文章介绍的很好: https://www.jianshu.com/p/e184fdc0ad…

otter mysql教学视频_3.Otter快速上手

QuickStart 1.几点说明 有一点特别注意:目前canal支持mixed,row,statement多种日志协议的解析,但配合otter进行数据库同步,目前仅支持row协议的同步,使用时需要注意. 环境准备 操作系统 a. otter为纯java编写,windows/…

通过docker构建otter

本文是通过docker构建otter环境与mysql环境 一、使用docker构建otter docker pull canal/otter-all curl -fsSL https://raw.githubusercontent.com/alibaba/otter/master/docker/run.sh | bash 访问otter:http://192.168.102.212:8080 账号密码默认是admin/adm…

Otter详解

otter girthub链接: https://github.com/alibaba/otter 有兴趣的同学可以移步笔者的个人博客 更多博客 整体架构 子模块解释 zooKeeper 分布式一致性协调服务,主要用来调度配置好的node模块。 manager 管理中心,用来配置同步信息&#…

otter 配置问题笔记

otter 部署启动 : 1,启动zookeeper 2,启动manager 3,启动node 4 在manger管理界面配置zookeeper 和node 添加映射关系表 点击pipeline的名称, 点击[批量添加] (一个一个的添加, 太累) 按照以下格式输入 数据库名,表1,【数据源配置】序号,目的数据源的序号 item,s…

otter快速开始

目录 一、Otter简介二、Otter目前支持了什么三、Canal & Otter 的一些注意事项四、otter单向同步搭建测试1. 环境准备2. Manager使用(任务配置整个流程)配置完整流程 3. 过程问题整理3.1 Problem accessing /channelList.htm. Reason:3.2 show maste…

Otter

一.概述 Otter 阿里巴巴分布式数据库同步系统:https://github.com/alibaba/otter Otter底层依赖Canal接收和解析mysql binlog日志,提供了可配置化的同步机制,纯java开发,免费开源的,基于数据库增量日志解析&#xff…

otter学习 | otter 基本介绍

一、项目介绍 名称:otter [‘ɒtə(r)] 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库。 二、工作原理 原理描述&#xf…

Otter-安装配置

简介 OTTER是阿里巴巴公司为了解决杭州/美国机房数据间同步研发的一个开源软件。OTTER基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库,是一个分布式数据库同步系统。 工作原理图: 原理描述: 基于Can…

Otter入门简介

一、Otter简介 1.1 otter是什么? otter 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。Ottter是…

2.Otter原理介绍

Introduction 项目介绍 名称:otter [ɒtə(r)] 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 工作原理 image 原理描述&…

斐波那契数列输出的C语言实现

斐波那契数列输出的C语言实现 1.流程图 2.代码实现 #include <stdio.h>#define num1 0//第一项 #define num2 1//第二项int Fibonacci_Sequence(int num_n1, int num_n2, int times_0,int times_already)//num_1为第n-2位数&#xff0c;int num_n2为第n-1位数&#xf…

蓝桥杯入门训练Fibonacci数列 C语言

Fibonacci数列 C语言 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 说明: 在本题中…

C语言 计算斐波那契数列

C语言 计算斐波那契数列 前言 在学习C语言的道路上多次遇到了求斐波那契数列的问题&#xff0c;今天来总结一下我所知道的几种思想方法。方法一&#xff1a;循环 使用斐波那契数列的推导式&#xff0c;通过循环将每一个值保存到数组fib中。需要说明的是&#xff0c;这里的fi…

c语言数组的斐波那契数列

c语言数组的斐波那契数列 核心思想&#xff1a;后一项是前一项的和 a[i]a[i-1]a[i-2]&#xff1b; 题干 转换为代码 #include<stdio.h> int main() {int i,n,a[20]{1,1};scanf("%d",&n);if(n<2)printf("%d",1);else{for(i2;i<n;i)a[i]a…