
Kafka
文章平均质量分 92
Kafka源码
宋小生的博客
《中间件源码》 示例先行,深入浅出的源码解析分享
展开
-
kafka源码-处理Poll的IO返回结果
如果失去连接数大于0则标记请求更新元数据变量needUpdate为true下次io时候请求新的元数据。如果失去连接数大于0则标记请求更新元数据变量needUpdate为true下次io时候请求新的元数据。NetworkClient的handleCompletedReceives方法。NetworkClient的handleTimedOutRequests方法。清理当前节点对应飞行窗口InFlightRequests中的请求队列中的数据。NetworkClient的completeResponses方法。原创 2022-11-14 23:04:30 · 839 阅读 · 0 评论 -
Kafka源码-执行IO事件
前面介绍了用户的的消息记录被转换为内存记录然后存放在了飞行窗口中,将请求信息放入了Kafka通道之后通过OP_WRITE事件来唤醒IO,这里在IO轮训中开始执行IO逻辑可以看到IO事件主要做了两件事接下来开始贴核心代码了:这里KafkaClient是一个接口类型,这里的实现类型为NetworkClient,poll代码如下所示:Selector的poll方法 IO执行逻辑的模版方法Selector的pollSelectionKeys方法 循环处理IO事件的方法。原创 2022-11-14 23:03:46 · 726 阅读 · 0 评论 -
Kafka源码-发送器Sender类型的的sendProducerData 模版方法
前面对用户待发消息的批处理队列进行了处理得到最终需要发送的批处理消息集合然后遍历每个节点对应的批处理集合,将其存放在网络通道中等后续IO逻辑执行的时候将Kafka通道中存放的消息发送出去。NetworkSend类型的待发数据中存储的是请求目的地和请求头数据,而真实的数据是在飞行窗口中存储着的。KafkaClient 是一个封装客户端的一个接口,仅有的实现类型为NetworkClient。kafka Selector类型的的send方法队列给定的请求。NetworkClient的doSend方法。原创 2022-11-14 23:03:19 · 885 阅读 · 0 评论 -
2 生产者KafkaProducer对象的初始化
这个类型是将记录发布到Kafka群集的Kafka客户端。生产者是线程安全的,跨线程共享单个生产者实例通常比拥有多个实例快。下面是一个使用生产者发送记录的简单示例,其中包含序列号作为键/值对的字符串。生产者包括一个缓冲区池,其中保存尚未传输到服务器的记录,以及一个后台I/O线程,负责将这些记录转换为请求并将其传输到集群。使用后未关闭生产者将泄漏这些资源。。调用时,它将记录添加到挂起中,并立即返回。这使制作人能够将单个记录批处理在一起,以提高效率。原创 2022-11-14 23:01:53 · 359 阅读 · 0 评论 -
【Kafka源码】- 生产者KafkaProducer对象的初始化
这个类型是将记录发布到Kafka群集的Kafka客户端。生产者是线程安全的,跨线程共享单个生产者实例通常比拥有多个实例快。下面是一个使用生产者发送记录的简单示例,其中包含序列号作为键/值对的字符串。i < 100;生产者包括一个缓冲区池,其中保存尚未传输到服务器的记录,以及一个后台I/O线程,负责将这些记录转换为请求并将其传输到集群。使用后未关闭生产者将泄漏这些资源。send() 方法是异步的。调用时,它将记录添加到挂起记录发送的缓冲区中,并立即返回。原创 2022-10-02 21:49:27 · 956 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-6- Kafka客户端的IO线程KafkaThread
回到前面说的KafkaProducer的构造器的初始化在发送器执行之后将会执行创建KafkaThread和启动线程的代码如下代码:KafkaProducer构造器中的部分代码6.2 KafkaThread构造器这个线程类型做的事情不多主要设置一下线程名字,然后将线程设置为守护线程如下代码所示:KafkaThread类型的构造器如下所示:6.3 发送器Sender中执行线程的I/O主循环核心逻辑前面我们看到了 线程类型在初始化的时候传递了Sender对象来执行线程逻辑,Sender类型实现了Runna原创 2022-06-26 16:23:00 · 692 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-5- Kafka的发送器对象的初始化
对应Sender 对应代码:Sender类型实现了Runnable接口Sender对象处理向Kafka群集发送生产消息的请求的后台线程。该线程发出元数据请求以更新其集群视图,然后将生成请求发送到适当的节点。可以简单总结下这个过程如下所示:发送器对象的创建过程有几个重要的类型我们是要看的,下面我们先来看KafkaClient类型对象的创建和初始化网络客户端 对象创建 用于异步请求/响应网络i/o的网络客户端。这是一个内部类,用于实现面向用户的生产者和消费者客户端。NetworkClient此类不是线程安全原创 2022-06-26 16:19:56 · 867 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-4 KafkaProducer生产者对象的长篇源码解析简介
生产者用来发送消息到kafka代理服务器,我们先来看下KafkaProducer类型的官方说明:KafkaProducer是将记录发布到Kafka群集的Kafka客户端。生产者是线程安全的,跨线程共享单个生产者实例通常比拥有多个实例更快。下面是一个简单的示例,使用producer发送包含序列号的字符串作为键/值对的记录。生产者包括一个缓冲区池,其中保存尚未传输到服务器的记录,以及一个后台I/O线程,负责将这些记录转换为请求并将其传输到集群。使用后未关闭生产者将泄漏这些资源。send() 方法是异步的。原创 2022-06-03 10:15:19 · 612 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-3-从一个Kafka的Demo说起
目录3-从一个Kafka的Demo说起3.1 简介3.2 Demo编写3.2.1 引入依赖配置日志3.2.2 生产者例子3.2.3 消费者例子3.2.4 观察节点与topic信息3-从一个Kafka的Demo说起3.1 简介为了在理论中可以更好的理解一些细节,我们通过一个Demo开始来详细看kafka的实现原理,首先我们要做的是本地启动一个kafka,关于启动kakfa可以看前面这个文章: 《1-Kaka知识点全解析》启动完kafka之后我们就来编写一个生产者的示例代码,关于生产者的Demo来源于,原创 2022-05-28 09:06:37 · 239 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-2-Kaka高性能高可用设计原理
目录2-Kaka高性能设计原理2.1 简介2.2 持久性的设计传统的数据复制方法传统的上下文切换使用 transferTo() 复制数据使用 transferTo() 进行上下文切换使用 transferTo() 和收集操作时的数据副本端到端批量压缩2.3 生产者的设计2.3.1 负载均衡2.3.2 异步发送2.4 消费者的设计2.4.1 简介2.4.2推与拉2.5 消费者偏移量的设计2.6.1 消息状态确认机制解决丢失消息问题(消息)2.6.2 Kafka的偏移量解决消费状态2.7 消息传递语义2.7.1原创 2022-05-21 08:25:34 · 384 阅读 · 0 评论 -
[Apache Kafka 3.2源码解析系列]-1-Kaka知识点全解析
1-Kaka入门1.1 简介这里大部分内容来自于官网的学习笔记,更详细内容可以打开Apache Kafka官网进行研究官网地址1.1.1 Apache Kafka是什么?摘抄自官网首页的一段话:Apache Kafka 是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。1.1.2 核心能力高吞吐量使用延迟低至 2 毫秒的机器集群以网络有限的吞吐量传递消息。可扩展将生产集群扩展到一千个代理、每天数万亿条消息、PB 级数据、数十万个分原创 2022-05-12 08:10:52 · 542 阅读 · 9 评论