kafka jdbc sink connect源码调研

本文详细调研了Kafka的JdbcSinkConnector和JdbcSinkTask,介绍了它们在数据迁移过程中的关键步骤。JdbcSinkConnector在启动时指定任务类JdbcSinkTask并传递配置。JdbcSinkTask的start方法中,配置被封装成JdbcSinkConfig,并初始化writer。put方法接收来自Kafka的记录,通过JdbcDbWriter将数据写入数据库。JdbcDbWriter利用CachedConnectionProvider获取连接,根据表名聚合记录,并根据schema变化更新表结构或执行删除、插入操作。
摘要由CSDN通过智能技术生成

JdbcSinkConnector

public class JdbcSinkConnector extends SinkConnector {
   
  public Class<? extends Task> taskClass() {
   
  }

  @Override
  public List<Map<String, String>> taskConfigs(int maxTasks) {
   
  }

  @Override
  public void start(Map<String, String> props) {
   
  }

  @Override
  public void stop() {
   
  }

  @Override
  public ConfigDef config() {
   
  }

  @Override
  public Config validate(Map<String, String> connectorConfigs) {
   
  }

  @Override
  public String version() {
   
  }
}

start: connect启动时的生命周期方法,props为创建connect实例时填写的config参数,例如:

{
   
  "name": "jdbc-sink-debezium", 
  "config": {
   
    "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", 
    "tasks.max": "1",
    "topics": "mysql02.debezium_test_db.person2",
    "table.name.format": "test.person",
    "connection.url": "jdbc:db2://192.168.84.136:50000/TEST", 
    "connection.user": "db2inst1", 
    "connection.password": "root1234", 
    "transforms": "unwrap",
    "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
    "transforms.unwrap.drop.tombstones": "false",
    "auto.create": "true",
    "auto.evolve": "true",
    "insert.mode": "insert",
    "delete.enabled": "true",
    "pk.fields": "id",
    "pk.mode": "record_key"
  }
}

taskClass: 指定真正执行任务的类,必须为SinkTask的子类
taskConfigs: 传递给任务对象的配置
这个类的作用主要时指定了任务类为JdbcSinkTask,并且将启动参数原封不动的传递给任务对象。

JdbcSinkTask

public class JdbcSinkTask extends SinkTask {
   

  @Override
  public void start(final Map<String, String> props) {
   
  }

  @Override
  public void put(Collection<SinkRecord> records) {
   
  }

  public void stop() {
   
  }
}

start: props为接受的启动参数,由JdbcSinkConnector的taskConfigs提供
put: connect从kafka中获取到的数据后会封装成record对象调用这个put方法
stop: 任务关闭时执行的生命周期方法

start

先看start方法:

@Override
  public void start(final Map<String, String> props) {
   
    log.info("Starting JDBC Sink task"); 
    config = new JdbcSinkConfig(props)</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值