canalAdapter同步至es7.x踩坑指南

没啥,就是跌倒的有点多,在此记录一下。
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版权协议,转载请附上原文出处链接和本声明。