canal学习-运行canal-adapter源码并记录解决报错问题(一)

news/2024/11/25 12:25:05/

运行canal-adapter

  • 1. 下载canal源码
    • 1.1 下载源码并安装好环境
    • 1.2 查看目录结构
  • 2.项目运行
    • 2.1 项目打包
    • 2.2 项目打包可能遇到的问题:
      • 1.Failure to find com.alibaba.otter:connector.tcp:jar:jar-with-dependencies:1.1.5
      • 2.com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
  • 3.配置application.yml
  • 4.运行项目
    • 4.1 运行启动类:CanalAdapterApplication.java
    • 4.2 Config dir not found 报错解决
  • 5.可直接运行的项目源码

省流:最后面有能直接跑的源码,可以直接下载运行

1. 下载canal源码

1.1 下载源码并安装好环境

官网地址:https://github.com/alibaba/canal/releases/tag/canal-1.1.5
在这里插入图片描述
服务端的部署参考我之前写过的文档: canal实时同步mysql数据到elasticsearch,注意只需要去部署一个服务端
保证以下组件已经安装运行

组件版本
mysql8.0.23
elasticsearch7.9.0

1.2 查看目录结构

下载解压后的目录结构如下,我们当前只关注客户端的代码
在这里插入图片描述
在这里插入图片描述

2.项目运行

使用idea打开项目,由于需求是往es同步数据,因此需要关注以下三个模块
在这里插入图片描述

2.1 项目打包

打包顺序如下,务必不要打乱顺序,模块之间存在依赖

  1. escore->mvn clean install
  2. es7x->mvn clean install
  3. launcher->mvn clean install

在这里插入图片描述

2.2 项目打包可能遇到的问题:

1.Failure to find com.alibaba.otter:connector.tcp:jar:jar-with-dependencies:1.1.5

[ERROR] Failed to execute goal on project client-adapter.launcher: Could not resolve dependencies for project com.alibaba.otter:client-adapter.launcher:jar:1.1.5: Failure to find com.alibaba.otter:connector.tcp:jar:jar-with-dependencies:1.1.5 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forced -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 

原因:connector.tcp maven下载不到导致的,tmd吊jar包找了半天才找到,还要劳资扫码关注才能下载

链接:https://pan.baidu.com/s/1Biw-Gwum-vPaqfWhqc_gGQ?pwd=of2e
提取码:of2e

解决方案:下载jar后放到报错信息中maven仓库的位置
在这里插入图片描述
在这里插入图片描述

2.com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: es7 failed
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSourceat com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter.init(ES7xAdapter.java:54) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]at co 
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSourceat com.alibaba.otter.canal.client.adapter.es.core.ESAdapter.init(ESAdapter.java:83) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]at com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter.init(ES7xAdapter.java:52) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]... 42 common frames omitted
Caused by: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSourceat com.alibaba.otter.canal.client.adapter.es.core.ESAdapter.addSyncConfigToCache(ESAdapter.java:146) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]at com.alibaba.otter.canal.client.adapter.es.core.ESAdapter.init(ESAdapter.java:75) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]... 43 common frames omitted
2023-05-15 21:29:59.969 [main] INFO  c.alibaba.otter.canal.connector.core.spi.ExtensionLoader - extension classpath dir: D:\IdeaProjects\canal\canal-canal-1.1.5\client-adapter\launcher\target\canal-adapter\plugin
2023-05-15 21:29:59.985 [main] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Start adapter for canal-client mq topic: cqu-g1 succeed
2023-05-15 21:29:59.985 [main] INFO  c.a.o.canal.adapter.launcher.loader.CanalAdapterService - ## the canal client adapters are running now ......
2023-05-15 21:29:59.985 [Thread-9] INFO  c.a.otter.canal.adapter.launcher.loader.AdapterProcessor - =============> Start to connect destination: cqu <=============
2023-05-15 21:29:59.989 [main] INFO  org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8081"]
2023-05-15 21:29:59.989 [main] INFO  org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
2023-05-15 21:30:00.023 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8081 (http) with context path ''
2023-05-15 21:30:00.026 [main] INFO  c.a.otter.canal.adapter.launcher.CanalAdapterApplication - Started CanalAdapterApplication in 3.208 seconds (JVM running for 4.171)
2023-05-15 21:30:00.100 [Thread-9] INFO  c.a.otter.canal.adapter.launcher.loader.AdapterProcessor - =============> Subscribe destination: cqu succeed <=============

原因:common和escore的druid包冲突
解决方案:
限制escore的pom文件中的druid的作用域,定位到 client-adapter.escore 模块的 pom.xml
在这里插入图片描述
上图红框出修改为

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><scope>provided</scope>
</dependency>

3.配置application.yml

在这里插入图片描述
在这里插入图片描述

server:port: 8081
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8default-property-inclusion: non_nullcanal.conf:mode: tcp #tcp kafka rocketMQ rabbitMQflatMessage: truezookeeperHosts:syncBatchSize: 10000retries: 0timeout:accessKey:secretKey:consumerProperties:# canal tcp consumercanal.tcp.server.host: 192.168.0.10:11111 #canal服务端地址canal.tcp.zookeeper.hosts:canal.tcp.batch.size: 5000canal.tcp.username:canal.tcp.password:srcDataSources:defaultDS:url: jdbc:mysql://192.168.0.10:3306/dev_db?useUnicode=true #测试数据库连接username: canal #数据库账号password: canal #数据库密码canalAdapters:- instance: cqu # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- name: es7 # ES同步适配器hosts: http://192.168.0.10:11700 # ES连接地址properties:mode: rest # 模式可选transport(9300) 或者 rest(9200)cluster.name: es-single # ES集群名称, 与es目录下 elasticsearch.yml文件cluster.name对应

4.运行项目

4.1 运行启动类:CanalAdapterApplication.java

在这里插入图片描述

4.2 Config dir not found 报错解决

运行时可能会有的报错:

ERROR c.a.o.canal.adapter.launcher.loader.CanalAdapterLoader - Load canal adapter: es7 failed
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: Config dir not found.at com.alibaba.otter.canal.client.adapter.es7x.ES7xAdapter.init(ES7xAdapter.java:54) ~[client-adapter.es7x-1.1.5-jar-with-dependencies.jar:na]at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.loadAdapter(CanalAdapterLoader.java:225) [classes/:na]at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterLoader.init(CanalAdapterLoader.java:56) [classes/:na]at com.alibaba.otter.canal.adapter.launcher.loader.CanalAdapterService.init(CanalAdapterService.java:60) [classes/:na]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221]at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221]

原因:launcher模块下缺少es7文件夹
解决:将es7x下的es7文件夹复制到launcher的resources目录下
在这里插入图片描述
在这里插入图片描述
target中生成的文件
在这里插入图片描述
重新运行,即可运行成功
在这里插入图片描述

5.可直接运行的项目源码

以下代码在运行前,需要在根目录执行mvn clean install 命令,然后修改application.yml的配置后就可以直接运行。
在这里插入图片描述

链接:https://pan.baidu.com/s/1sKOdIdAMGkgHP1XddWfGLA?pwd=yw33
提取码:yw33


http://www.ppmy.cn/news/68860.html

相关文章

leetcode 27. 移除元素

给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

JSP基于网络超市商品销售管理系统的设计与实现(源代码+论文)

随着互联网日益深入我们的生活&#xff0c;网上商品销售的方式也逐渐被人们所接受&#xff0c;因而集成销售管理功能的网上销售系统也显得更加重要而实用。鉴于此&#xff0c;本课题设计了基于网络超市的商品销售管理系统。首先&#xff0c;论文简单介绍了商品销售管理系统的产…

Servlet3.0 新特性全解

Servlet3.0新特性全解 tomcat 7以上的版本都支持Servlet 3.0 Servlet 3.0 新增特性 注解支持&#xff1b;Servlet、Filter、Listener无需在web.xml中进行配置&#xff0c;可以通过对应注解进行配置&#xff1b;支持Web模块&#xff1b;Servlet异步处理&#xff1b;文件上传AP…

【程序员的职场】

随着信息技术的不断发展&#xff0c;程序员这个职业也越来越受到人们的关注。作为一个程序员&#xff0c;面对日新月异的技术变迁和高速发展的市场需求&#xff0c;我们需要具备强大的技术能力和快速学习的能力&#xff0c;以保持自己在职场中的竞争力。 作为一个程序员&#…

scrollIntoView的基本定义、以及Vue3、vue2中使用: 点击导航滚动到对应区域。

1. 基本定义 MDN 关于scorllIntoView的介绍 Element 接口的 scrollIntoView() 方法会滚动元素的父容器&#xff0c;使被调用 scrollIntoView() 的元素对用户可见。 scrollIntoView()scrollIntoView(alignToTop)scrollIntoView(scrollIntoViewOptions) 1. alignToTop 可选 alig…

[译] Flutter 3.10 的新功能

[译] Flutter 3.10 的新功能 原文 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 无缝的Web和移动端集成&#xff0c;Impeller稳定版的突破性图形性能&#xff0c;以及更多 欢迎使用Flutter 3.10&#xff01;我们非常期待展示我们令人惊叹的Flutter社区所…

oracle用户账号被锁的问题

oracle数据库用户被锁 select username,account_status,lock_date from dba_users; select RESOURCE_NAME,RESOURCE_TYPE,LIMIT from dba_profiles where resource_name like FAILED_LOGIN_ATTEMPTS% AND profileDEFAULT; 3&#xff0c;解锁方法   ALTER USER USER_NAME…

方案设计——食物测温仪方案

食物测温仪&#xff0c;在食物烹饪时&#xff0c;温度和时间至关重要&#xff0c;所以食物测温仪孕育而生&#xff0c;当用户使用时只需将食物测温仪的探头插入食物中&#xff0c;即刻能得到当前食物温度数据&#xff0c;不必用经验判断。做为一款食物测温仪&#xff0c;运用场…