01、在项目中加入maven依赖
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.1.4</version>
</dependency>
02、在自定义的实现类中传入的是kafka传来的binlog,string格式,后续我们仅需要将binlog解析打入到kudu数据库即可
03、查看源码,FlatMessage 就是binlog格式的类对象
package com.alibaba.otter.canal.protocol;
import com.alibaba.google.common.collect.Lists;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public class FlatMessage implements Serializable {
private static final long serialVersionUID = -3386650678735860050L;
private long id;
private String database;
private String table;
private List<String> pkNames;
private Boolean isDdl;
private String type;
private Long es;
private Long ts;
private String sql;
private Map<String, Integer> sqlType;
private Map<String, String> mysqlType;
private List<Map<String, String>> data;
private List<Map<String, String>> old;
public FlatMessage() {
}
public FlatMessage(long id) {
this.id = id;
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getDatabase() {
return this.database;
}
public void setDatabase(String database) {
this.database = database;
}
public String getTable() {
return this.table;
}
public void setTable(String table) {
this.table = table;
}
public List<String> getPkNames() {
return this.pkNames;
}
public void addPkName(String pkName) {
if (this.pkNames == null) {
this.pkNames = Lists.newArrayList();
}
this.pkNames.add(pkName);
}
public void setPkNames(List<String> pkNames) {
this.pkNames = pkNames;
}
public Boolean getIsDdl() {
return this.isDdl;
}
public void setIsDdl(Boolean isDdl) {
this.isDdl = isDdl;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
public Long getTs() {
return this.ts;
}
public void setTs(Long ts) {
this.ts = ts;
}
public String getSql() {
return this.sql;
}
public void setSql(String sql) {
this.sql = sql;
}
public Map<String, Integer> getSqlType() {
return this.sqlType;
}
public void setSqlType(Map<String, Integer> sqlType) {
this.sqlType = sqlType;
}
public Map<String, String> getMysqlType() {
return this.mysqlType;
}
public void setMysqlType(Map<String, String> mysqlType) {
this.mysqlType = mysqlType;
}
public List<Map<String, String>> getData() {
return this.data;
}
public void setData(List<Map<String, String>> data) {
this.data = data;
}
public List<Map<String, String>> getOld() {
return this.old;
}
public void setOld(List<Map<String, String>> old) {
this.old = old;
}
public Long getEs() {
return this.es;
}
public void setEs(Long es) {
this.es = es;
}
public String toString() {
return "FlatMessage [id=" + this.id + ", database=" + this.database + ", table=" + this.table + ", isDdl=" + this.isDdl + ", type=" + this.type + ", es=" + this.es + ", ts=" + this.ts + ", sql=" + this.sql + ", sqlType=" + this.sqlType + ", mysqlType=" + this.mysqlType + ", data=" + this.data + ", old=" + this.old + "]";
}
}
04、用下面的方式实现类对象
FlatMessage flatMessage = JSON.parseObject(flatMessageJson, FlatMessage.class);
05、之后编写工具类实现kudu解析flatMessage ,完成增删改即可