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
    评论
Kafka Connect是一个用于数据集成的开源工具,它是Apache Kafka项目的一部分。Kafka Connect旨在简化将数据从不同的数据源和数据目的地流动到Kafka集群的过程。 Kafka Connect源码是以Java语言编写的,它包含了连接器和转换器等关键组件。连接器是负责从数据源中读取数据并将其写入Kafka的组件,它们支持许多常见的数据源,如数据库、文件系统、消息队列等。转换器用于对读取的数据进行转换和处理,以便在不同的数据格式和结构之间进行映射。 源码中的关键类包括Connector、Task、SinkTask和SourceTask。Connector类是连接器的主要实现,它负责配置和启动连接器的任务。每个连接器可以有一个或多个任务,Task类是连接器任务的抽象基类,负责实际的数据读写操作。SinkTask是将数据写入Kafka集群的任务,而SourceTask是从数据源中读取数据的任务。 Kafka Connect源码还包含了许多其他的实用类和工具,用于处理连接器的配置、监控连接器的运行状态、处理错误和故障等。源码中的关键逻辑包括数据的序列化和反序列化、数据的转换和处理、连接器的动态扩展和配置的管理等。 通过研究Kafka Connect源码,我们可以深入理解它的工作原理和实现细节,从而更好地使用和扩展Kafka Connect,满足各种数据集成的需求。我们可以通过修改或扩展源码来适应特定的数据源和数据目的地,并通过调试源码来解决连接器运行中的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值