问题
canal提供了从MySQL订阅数据组件,并默认支持了同步到hbase
等适配器,但是没有支持直接同步到Phoenix
的功能,如果是Phoenix
的表,只同步到hbase
会有二级索引以及存在字段编码的问题,为此需要一个从MySQL
直接同步到Phoenix
的适配器。
解决方案
开发canal-phoenix-adapter用于解决canal
同步到Phoenix
的问题。
可以直接下载编译好的适配器https://github.com/wenjunxiao/canal-phoenix-adapter/releases,如果对应版本的适配器不存在,也可以下载源码自行编译
$ export CANAL_VERSION=1.x.x # version must be matched
$ wget https://github.com/alibaba/canal/releases/download/canal-$CANAL_VERSION/canal.adapter-$CANAL_VERSION.tar.gz
$ tar -xzf canal.adapter-$CANAL_VERSION.tar.gz
$ mkdir -p repo/com/alibaba/otter/client-adapter.common/$CANAL_VERSION
$ cp canal.adapter-$CANAL_VERSION/lib/client-adapter.common-$CANAL_VERSION.jar \
repo/com/alibaba/otter/client-adapter.common/$CANAL_VERSION/
$ mvn clean package
$ cp target/client-adapter.phoenix-$CANAL_VERSION-jar-with-dependencies.jar canal.adapter-$CANAL_VERSION/plugin/
为了canal
能够连接Phoenix
使用Phoenix
自带的phoenix-x.xx.x-HBase-x.x-client.jar
会有包冲突的问题,为此,重新打包client
,可以接下载canal-phoenix-client对应版本的客户端canal-phoenix-x.x.x-HBase-x.x-client.jar
代替·Phoenix·自带的包,也可以按照文档自行编译对应的版本,放在canal-adapter
的lib
目录
$ export PHOENIX_VERSION=4.14.0-HBase-1.2
$ wget http://archive.apache.org/dist/phoenix/apache-phoenix-$PHOENIX_VERSION/bin/apache-phoenix-$PHOENIX_VERSION-bin.tar.gz
$ tar -xzf apache-phoenix-$PHOENIX_VERSION-bin.tar.gz
$ mkdir -p repo/org/apache/phoenix/phoenix-client/$PHOENIX_VERSION
$ cp apache-phoenix-$PHOENIX_VERSION-bin/phoenix-$PHOENIX_VERSION-client.jar repo/org/apache/phoenix/phoenix-client/$PHOENIX_VERSION/phoenix-client-$PHOENIX_VERSION.jar
$ mvn clean package