dbeaver连接mysql 驱动jar_Kafka连接器深度解读之JDBC源连接器

在现实业务中,Kafka经常会遇到的一个集成场景就是,从数据库获取数据,因为关系数据库是一个非常丰富的事件源。数据库中的现有数据以及对该数据的任何更改都可以流式传输到Kafka主题中,在这里这些事件可用于驱动应用,也可以流式传输到其它数据存储(比如搜索引擎或者缓存)用于分析等。

实现这个需求有很多种做法,但是在本文中,会聚焦其中的一个解决方案,即Kafka连接器中的JDBC连接器,讲述如何进行配置,以及一些问题排查的技巧,至于更多的细节,请参见Kafka的文档。

介绍

Kafka连接器中的JDBC连接器包含在Confluent Platform中,也可以与Confluent Hub分开安装。它可以作为源端从数据库提取数据到Kafka,也可以作为接收端从一个Kafka主题中将数据推送到数据库。几乎所有关系数据库都提供JDBC驱动,包括Oracle、Microsoft SQL Server、DB2、MySQL和Postgres。

60ca8540b133ecf15a05b45531e42519.png

下面将从最简单的Kafka连接器配置开始,然后进行构建。本文中的示例是从MySQL数据库中提取数据,该数据库有两个模式,每个模式都有几张表:

mysql> SELECT table_schema, table_name FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA != 'information_schema';+--------------+--------------+| TABLE_SCHEMA | TABLE_NAME |+--------------+--------------+| demo | accounts || demo | customers || demo | transactions || security | firewall || security | log_events |+--------------+--------------+

JDBC驱动

在进行配置之前,要确保Kafka连接器可以实际连接到数据库,即确保JDBC驱动可用。如果使用的是SQLite或Postgres,那么驱动已经包含在内,就可以跳过此步骤。对于所有其它数据库,需要将相关的JDBC驱动JAR文件放在和kafka-connect-jdbcJAR相同的文件夹中。此文件夹的标准位置为:

  1. Confluent CLI:下载的Confluent Platform文件夹中的share/java/kafka-connect-jdbc/;
  2. Docker,DEB / RPM安装:/usr/share/java/kafka-connect-jdbc/,关于如何将JDBC驱动添加到Kafka连接器的Docker容器,请参阅此处;
  3. 如果kafka-connect-jdbcJAR位于其它位置,则可以使用plugin.path指向包含它的文件夹,并确保JDBC驱动位于同一文件夹中。

还可以在启动Kafka连接器时指定CLASSPATH,设置为可以找到JDBC驱动的位置。一定要将其设置为JAR本身,而不仅仅是包含它的文件夹,例如:

CLASSPATH=/u01/jdbc-drivers/mysql-connector-java-8.0.13.JAR ./bin/connect-distributed ./etc/kafka/connect-distributed.properties

两个事情要注意一下:

  1. 如果kafka-connect-jdbcJAR位于其它位置,则Kafka连接器的plugin.path选项将无法直接指向JDBC驱动JAR文件 。根据文档,每个JDBC驱动JAR必须与kafka-connect-jdbcJAR位于同一目录;
  2. 如果正在运行多节点Kafka连接器集群,则需要在集群中的每个连接器工作节点上都正确安装JDBC驱动JAR。

找不到合适的驱动

与JDBC连接器有关的常见错误是No suitable driver found,比如:

{"error_code":400,"message":"Connector configuration is invalid and contains the following 2 error(s):Invalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://X.X.X.X:3306/test_db?user=root&password=pwd for configuration Couldn't open connection to jdbc:mysql://X.X.X.X:3306/test_db?user=root&password=pwdInvalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://X.X.X.X:3306/test_db?user=root&password=admin for configuration Couldn't open connection to jdbc:mysql://X.X.X.X:3306/test_db?user=root&password=pwdYou can also find the above list of errors at the endpoint `/{connectorType}/config/validate`"}

这可能有2个原因:

  1. 未加载正确的JDBC驱动;
  2. JDBC URL不正确。

确认是否已加载JDBC驱动

Kafka连接器会加载与kafka-connect-jdbcJAR文件在同一文件夹中的所有JDBC驱动,还有在CLASSPATH上找到的任何JDBC驱动。如果要验证一下,可以将连接器工作节点的日志级别调整为DEBUG,然后会看到如下信息:

1.DEBUG Loading plugin urls:包含kafka-connect-jdbc-5.1.0.jar(或者对应当前正在运行的版本号)的一组JAR文件:

DEBUG Loading plugin urls: [file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/audience-annotations-0.5.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/common-utils-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jline-0.9.94.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jtds-1.3.1.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/kafka-connect-jdbc-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/mysql-connector-java-8.0.13.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/netty-3.10.6.Final.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/postgresql-9.4-1206-jdbc41.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/slf4j-api-1.7.25.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/sqlite-jdbc-3.25.2.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zkclient-0.10.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zookeeper-3.4.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

在这个JAR列表中,应该有JDBC驱动JAR。在上面的输出中,可以看到MySQL、Postgres和SQLite的JAR。如果期望的JDBC驱动JAR不在,可以将驱动放入kafka-connect-jdbcJAR所在的文件夹中。

2.INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector':在此之后,在记录任何其它插件之前,可以看到JDBC驱动已注册:

INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)DEBUG Registered java.sql.Driver: jTDS 1.3.1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@7bbbb6a8 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)DEBUG Registered java.sql.Driver: org.postgresql.Driver@ea9e141 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)DEBUG Registered java.sql.Driver: org.sqlite.JDBC@236134a1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

确认JDBC驱动包含在已注册的列表中。如果没有,那么就是安装不正确。

注意,虽然可能会在日志的其它地方看到驱动的Registered java.sql.Driver信息,但如果要确认其对于JDBC连接器可用,那么它必须直接出现在INFO Added plugin 'io.confluent.connect.jdbc消息的后面。

JDBC URL

对于源数据库来说JDBC URL必须是正确的,如果搞错了,那么Kafka连接器即使驱动正确,也是不行。以下是一些常见的JDBC URL格式:

b7e5970150ba66795dd3683f53ef78fe.png

注意,虽然JDBC URL通常允许嵌入身份验证信息,但这些内容将以明文形式记录在Kafka连接器日志中。因此应该使用单独的connection.user和connection.password配置项,这样在记录时会被合理地处理。

指定要提取的表

JDBC驱动安装完成之后,就可以配置Kafka连接器从数据库中提取数据了。下面是最小的配置,不过它不一定是最有用的,因为它是数据的批量导入,在本文后面会讨论如何进行增量加载。

curl -X POST http://localhost:8083/connectors -H "Content-Type: application/json" -d '{ "name": "jdbc_source_mysql_01
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值