Kafka connector (kafka核心API)

前言

Kafka Connect是一个用于将数据流输入和输出Kafka的框架。Confluent平台附带了几个内置connector,可以使用这些connector进行关系数据库或HDFS等常用系统到Kafka的数据传输,也是用来构建ETL的一种方案。本次测试以pgsql为主

 

Kafka Connect基本概念:

  • Kafka Connect实际上是Kafka流式计算的一部分
  • Kafka Connect主要用来与其他中间件建立流式通道
  • Kafka Connect支持流式和批处理集成

 

Kakfa Connect环境准备

Step1.

下载confluentinc-kafka-connect-jdbc-5.5.0.zip  

压缩包中 包含有  Confluent平台的JDBC的Connect 是实现数据复制 etl 的核心库

 

Step2.

如果目标库与源库是mysql 还需要下载 mysql 的驱动包 ,这里要注意版本,和后续配置文件中的链接串,以及用户的授权等细节

https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.20/mysql-connector-java-8.0.20.jar

 

step3.

将解压下载好的Connect压缩包,创建一个存放目录,将解压后的文件移到到该目录下,并将MySQL驱动包移动到Connect解压后的lib目录下:

 

 

 

 

 

 

 

 

Step4

编辑connect-distributed.properties配置文件,修改如下配置项(一定要确保8083端口开放)

# Broker Server的访问ip和端口号
bootstrap.servers=主机ip:9092
# 指定集群id
group.id=connect-cluster
# 指定rest服务的端口号
rest.port=8083
# 指定Connect插件包的存放路径
plugin.path=/xxx/xxx/xxx
step5. 启动Kafka Connect

  启动命令如下

 

 

参数 –daemon 表示后台启动

启动成功后,使用postman访问http://{ip}:8083/connector-plugins

会返回如下界面

 

 

 

表示Kafka Connect的环境ok

 

Step6.

Source Connector与Sink Connector如何与pgsql做集成。

首先使用API 创建 source connector

地址

http://{ip}:8083/connectors

参数

{

    "name":"test-upload-mysql",

    "config":{

        "connector.class":"io.confluent.connect.jdbc.JdbcSourceConnector",

         "connection.url":"jdbc:postgresql://124.71.155.137:5432/db2021?user=postgres&password=postgres",

        "table.whitelist":"comments",

        "incrementing.column.name":"id",

        "mode":"incrementing",

        "topic.prefix":"test-mysql-"

    }

}

参数格式一定是json 同时注意配置postman 请求参数格式 为application/json

参数说明:

  • name:指定新增的connector的名称
  • config:指定该connector的配置信息
  • connector.class:指定使用哪个Connector类
  • connection.url:指定pg的连接url
  • table.whitelist:指定需要加载哪些数据表
  • incrementing.column.name:指定表中自增列的名称
  • mode:指定connector的模式,这里为增量模式
  • topic.prefix:Kafka会创建一个Topic,该配置项就是用于指定Topic名称的前缀,后缀为数据表的名称。

 

返回值如下:

{
    "name":"test-upload-mysql",
    "config":{
        "connector.class":"io.confluent.connect.jdbc.JdbcSourceConnector",
        "connection.url":"jdbc:pgsql://{ip}:3306/kafka_store?user=root&password=123456a.",
        "table.whitelist":"users_input",
        "incrementing.column.name":"uid",
        "mode":"incrementing",
        "topic.prefix":"test-mysql-",
        "name":"test-upload-mysql"
    },
    "tasks":[

    ],
    "type":"source"
}

然后再次调用 connectors 接口,可看到名为test-upload-mysql connector

Step7

像数据库中添加数据注意源表名一定要和上述config 配置中table.whitelist值保持一致

Step8

可以启动consumer 查看kafka 对应topic ,topic 名称为config 配置中的前缀加表名

Step9

Kafka Connect Sink和MySQL集成

同样调用 connectors 接口参数列表不同,具体如下

'{"name":"test-download-mysql","config":{
"connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector",
"connection.url":"jdbc:pgsql://{ip}:3306/kafka_store?user=root&password=123456a.",
"topics":"test-mysql-users_input",
"auto.create":"false",
"insert.mode": "upsert",
"pk.mode":"record_value",
"pk.fields":"uid",
"table.name.format": "users_output"}}'

 

参数说明:

  • name:指定新增的connector的名称
  • config:指定该connector的配置信息
  • connector.class:指定使用哪个Connector类
  • connection.url:指定MySQL的连接url
  • topics:指定从哪个Topic中读取数据
  • auto.create:是否自动创建数据表
  • insert.mode:指定写入模式,upsert表示可以更新及写入
  • pk.mode:指定主键模式,record_value表示从消息的value中获取数据
  • pk.fields:指定主键字段的名称
  • table.name.format:指定将数据输出到哪张数据表上

成功返回对应信息

到此 connector 搭建完成,刷新目标表,即可看到数据已经同步

 

要注意的点 有如下几方面

  1. 配置参数格式问题
  2. 服务器对应端口号问题
  3. Kafka服务一定要先启动
  4. 数据库连接参数问题

 

 

原文转自 https://blog.51cto.com/zero01/2498682

posted @ 2021-03-26 11:41  采采卷耳&不盈倾筐  阅读(1767)  评论(0编辑  收藏  举报