kafka消息系统源码解析
文章平均质量分 64
以kafka1.1.1版本为基础进行源码研究。
分为生产者,消费者,broker服务三大部分进行。
猿来如此dj
目前西安工作-航天宏图公司大数据开发工程师,欢迎大家交流。
展开
-
(一)kafka源码阅读环境搭建
1:提前安装scala,JDK,gradle查看是否安装,安装的版本尽量和源码中要求的版本保持一致,详见README.md和gradle.properties文件中说明gradle下载地址:https://gradle.org/releases/ 下载解压配置环境变量即可。scala下载地址:https://www.scala-lang.org/download/2.11.12.html,下载.msi安装一直next完成即可,不用配环境变量。......原创 2022-06-22 09:09:34 · 1479 阅读 · 0 评论 -
(二)kafka架构以及源码结构介绍
Kafka集群中生产者将消息发送给以Topic命名的消息队列Queue中,消费者订阅发往以某个Topic命名的消息队列Queue中的消息。其中Kafka集群由若干个Broker组成,Topic由若干个Partition组成,每个Partition里的消息通过Offset来获取。基本组成包括:Kafka内部各个Broker之间的角色并不是完全相等的,Broker内部负责管理分区和副本状态以及异常情况下分区的重新分片等这些功能的模块称为KafkaController。每个Kafka集群中有且只有一个Leader原创 2022-06-22 10:01:29 · 839 阅读 · 0 评论 -
(3.1)broker源码——topic创建原理
kafka创建topic的原理分析原创 2022-06-15 10:21:46 · 352 阅读 · 0 评论 -
(3.2)broker源码——kafka如何rebalance重平衡
rebalance是重新进行负载均衡的过程。包括集群的rebalance,消费和生产者的rebalance 。broker的rebalance:每个broker上的分区leader个数尽量保持一致,从而保证生产或者消费时节点的cpu,io,磁盘等保持基本一致。默认每个broker上的leader差异超过10%此时会触发broker上的leader迁移。它本质上是一组协议,它规定了一个 consumer group 是如何达成一致来分配订阅 topic 的所有分区的。...............原创 2022-06-15 16:12:14 · 692 阅读 · 0 评论 -
(3.3)client源码——kafka网络通信客户端-NetworkClient类
位置:org.apache.kafka.clients;作用:用于异步请求/响应网络i/o的网络客户端。这是一个内部类,用于实现面向用户的生产者和消费者客户端,也就是说我们的生产请求和消费请求最后都会交给NetworkClient类处理。在sender线程中run时调用去。用于发送请求通过连接处理实际的读写操作............原创 2022-07-10 19:00:00 · 1092 阅读 · 0 评论 -
(3.4)client源码——Kafka 网络层实现机制之 Selector 多路复用器
org.apache.kafka.common.network.Selector,该类是 Kafka 网络层最重要最核心的实现,也是非常经典的工业级通信框架实现转发自 图解 Kafka 网络层实现机制之 Selector 多路复用器转载 2022-07-12 15:23:25 · 439 阅读 · 0 评论 -
(四)kafka生产者源码——全流程解析
废话少说,直接上总结。1:KafkaProducer类,详细源码解析见:作用:用于发送数据而提供的kafka 客户端,进行发送数据前的,集群连接配置,网络连接配置,用于向RecordAccumulator写数据。2:RecordAccumulator消息累加器,用于数据缓存,内存管理3:Sender独立于KafkaProducer的线程,负责发送RecordAccumulator数据前的准备工作,创建网络io请求,操作网络io层NetworkClient。4:NetworkClient是封装的一层网原创 2022-07-08 17:25:51 · 1926 阅读 · 2 评论 -
(4.1)kafka生产者源码——KafkaProducer类
位置:org.apache.kafka.clients.producer;作用:kafka提供的进行数据发送的客户端,进行数据发送前的配置,网络连接配置等主要属性和方法如下1.2:方法发送初始化时,进行初始化发送数据真正调用的方法send 在0.9版本后只有异步发送了......原创 2022-07-07 16:40:00 · 662 阅读 · 0 评论 -
(4.2)kafka生产者源码——RecordAccumulator类
位置:org.apache.kafka.clients.producer.internals作用:内存缓冲区,用于存储数据用来发送给server,作为一个消息累加器1.2:方法主要的追加数据的方法判断batch是否需要被发送的算法实现,获取已经可以发送分区数据对应的leader所在的node节点。创建或者得到分区对应的Deque队列...原创 2022-07-07 16:59:52 · 418 阅读 · 0 评论 -
(4.3)kafka生产者源码——Partitioner分区器,决定消息发送的分区
通过类图查看默认的Partitioner接口只有一个实现类DefaultPartitioner,也可以自己实现接口自定义每个topic都有一个固定的随机数作为开头,用于hash计算。原创 2022-07-09 10:30:00 · 435 阅读 · 0 评论 -
(4.4)kafka生产者源码——Sender线程类
独立于KafkaProducer的线程,符合条件时被唤醒启动用于发送数据。处理向Kafka集群发送生产请求的后台线程。此线程发出元数据请求以更新集群信息,然后将生产请求发送到相应的节点。1.2:方法主要使用的两个方法创建ClientRequest客户端请求,用于networkClient向Selector发送请求.........原创 2022-07-12 17:12:17 · 446 阅读 · 0 评论 -
(5.1)kafka消费者源码——消费者demo及源码解析
消费者分为高级和简单两种消费者高级:消费者组形式消费,更加简单高效可以使用shell命名消费topic使用客户端消费2:源码解析主要类介绍消费数据时最终调用发起消费的请求。下面进入分析消费者和分区的消费订阅关系在处实现。............原创 2022-06-21 15:51:08 · 1274 阅读 · 0 评论 -
(5.2)kafka消费者源码——Fetcher类
Fetcher类的主要功能是发送Fetcher请求,获取指定消息集合,处理FetchResponse,更新消息位置。fetchedRecords处理已经获取的每个分区的记录,清空记录缓冲区并更新消耗位置。向分配分区的所在节点发送fetch请求,拉取数据sendFetches。此类管理broker上的的提取过程。...原创 2022-07-28 17:22:40 · 971 阅读 · 0 评论 -
(5.3)kafka消费者源码——SubscriptionState类
SubscriptionState是KafkaConsumer用来追踪TopicPartition和offset的对应关系。原创 2022-06-21 14:35:39 · 269 阅读 · 0 评论 -
(5.4)kafka消费者源码——ConsumerCoordinator类和GroupCoordinator类
其主要是对AbstractCoordinator的实现,ConsumerCoordinator负责和GroupCoordinator通信,利用ConsumerNetworkClient完成与Kafka节点的通信,发出请求、制定异步响应流程例如在leader选举,入组,分区分配等过程。类图如下主要变量如下2:方法方法中定义了大量xxResponseHandler,制定了收到响应后的行为。比如JoinGroupResponseHandler描述了发出join group请求并收到响应后的行为。主要的方法-原创 2022-06-21 15:29:26 · 547 阅读 · 0 评论