Kafka connect 源码分析之 ConnectDistributed

介绍

kafka-connect是一个工具,用来在kafka和外部数据存储系统之间移动数据,kafka-connect可以简单快捷地将数据从kafka导入或导出,数据范围涵盖了关系型数据库、日志、度量数据、Hadoop、数据仓库、NoSql数据存储、ES等。

 kafka-connet 内置jetty web 服务提供多个restful endpoint 管理connetor。

本文针对有kafka connector 使用经验的开发者阅读。介绍分布式启动类ConnectDistributed源码逻辑,感兴趣的同学可以对源码进行调试分析。

架构分析

 


worker: kafka connect 进程,管理多个connecter & task 线程

connector: 管理connector运行状态

task: 实际执行数据导入与导出的任务

endpoints: 提供http接口创建,修改,删除connector&task

connect-offsets: 内置主题用于保存任务抽取时kafka主题offset

connect-configs:内置主题用于保存connector配置信息

connect-status:内置主题用于保存connector&task 运行状态

 kafka connect 采用多进程+多线程的设计方式来运行数据导入导出任务,配置信息运行信息通过kafka 主题进行存储。

 代码分析

启动入口类ConnectDistributed

 进入 ConnectDistributed 启动主类发现main方法逻辑并不复杂主要做了两件事

  • 加载配置文件
  • 启动connect

复杂的逻辑封装在startConnect方法中。 

由于startConnector方法过长下面会逐块进行分析,避免篇幅过长只分析内部功能忽略具体细节。

 图中每个红框代表具体的功能将按照顺序进行解析

  1. 通过配置文件加载kafka-connect 插件,例如debezuim 用来cdc监控mysql,sqlserver, oracle等数据的插件
  2. 初始化restserver 此处为jetty web 服务端
  3. 初始化kafka 网络请求客户端主要用于kafka 主题的管理例如:查询,创建等
  4. 创建connect-offsets主题读取器,读取器会启动一个线程同步connect-offsets中commit信息
  5. 创建woker 并初始化但并未创建connector&task
  6. 创建connect-status主题读取器,同样启动一个线程同步connect-status状态信息
  7. 创建connect-configs主题读取器,同样启动一个线程同步connect-configs配置信息
  8. 通过connect类启动DistributedHerder,DistributedHerder实现了runnable接口并被提交到线程池中执行
Connect类start方法主要做了两件事
  1. 启动herder线程
  2. 初始化jetty http endpoint 例如 /connectors等 路径

 herder start 内部将自己提交到线程池并启动,因为实现了runnable接口因此run方法中为启动逻辑

 startServices方法中会启动线程进行配置更新

 startServices内部启动图

 启动connector&task的逻辑在tick()方法中执行,

handleRebalanceCompleted方法中startWork()开启connector&task

  1.  获取connector 配置并创建connector
  2. 获取task 配置并创建task
  3. 通过worker 启动connector & task

 总结

 由于内部技术细节过多不在一一展开,关于kafka 消费者coordinator的逻辑不在本次分析范围,以后将分析kafka更多的技术细节

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值