没啥,就是跌倒的有点多,在此记录一下。
canal版本 1.1.5
es版本 7.14.1
kafka 2.6.0
环境windows10, 所有服务都是在win上运行的
接上篇。。。
搭建步骤
假设es已搭建完毕
- 首先下载canalAdapter1.1.5和canalAdapter1.1.5-alpha-2
- 然后将alpha-2中plugins目录下的client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar复制到1.1.5的plugins下
- 接着更改配置文件
/conf/application.yml 未放出的默认即可
srcDataSources:
defaultDS: #这里是源库地址
url: jdbc:mysql://106.xxxx.149:3306/short_url?useUnicode=true
username: root
password: root
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: es7
hosts: 127.0.0.1:9200 #es地址
properties:
mode: rest
cluster.name: elasticsearch
/conf/es7/customer.yml
dataSourceKey: defaultDS
destination: example
groupId: g1
esVersion: es7
esMapping:
_index: customer
_id: id
sql: "select t.id, t.name, t.email from customer t"
etlCondition: "where t.id>={}"
commitBatch: 3000
在es中创建doc
PUT customer
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
},
"mappings": {
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "text"
},
"email": {
"type": "text"
}
}
}
}
接下来启动adapter, 往consumer中插入一条数据,es中能看到数据变化,
adapter也会打印相应日志
问题一:ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource** )
这个属于canal1.1.5版本自带的bug,解决方式有二
一: 下载1.1.5版本源码,将client-adapter目录下escore的pom文件修改一下,然后将es7x打包,将打包好的文件替换adapter的plugins目录中的文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<scope>provided</scope>//加上这个
</dependency>
二:
下载v1.1.5-alpha-2的adapter,然后复制这个版本的client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar 放入1.1.5的plugins目录中
(本人是用这个方法解决的)
问题二:launcher.loader.AdapterProcessor - process error! .ConnectException: Connection refused: connect ....~[na:na]
.ConnectException: Connection refused: connect
…~[na:na])
这里adapter配置的是tcp模式 然后canal不是以tcp模式启动的,这就导致连接失败。
问题在于这个异常日志提示就挺离谱,你把我ip和端口打出来多好,来两个[na:na],谁知道哪错了
问题三: NullPointerException esMapping._type

这个错是因为官方配置中缺少某个属性,加上就可以了。
位置

问题四:更改后能正常增量同步和修改但是etl抛出异常
请求地址:127.0.0.1:8081/etl/elasticsearch/short_url.yml
这里原因比较简单,adapter会通过/etl后面的参数识别需要哪种类型适配器,我这里填错了, 将elasticsearch改为es7就可以了
有更多问题可以去git issue中去找找,或许能找到答案…
版权声明:本文为qq_27621745原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。