kafka.network.SocketServer分析】的更多相关文章

当Kafka启动时,会启动这个SocketServer来接收客户端的连接,处理客户端请求,发送响应. 这个类的注释说明了这个socket server的结构 /** * An NIO socket server. The threading model is * 1 Acceptor thread that handles new connections * N Processor threads that each have their own selector and read reques…
我们知道kafka是基于TCP连接的.其并没有像很多中间件使用netty作为TCP服务器.而是自己基于Java NIO写了一套. 几个重要类 先看下Kafka Client的网络层架构. 本文主要分析的是Network层. Network层有两个重要的类:Selector和KafkaChannel. 这两个类和Java NIO层的java.nio.channels.Selector和Channel有点类似. Selector几个关键字段如下 // jdk nio中的Selector java.n…
Kafka network Processor SocketServer.Processor override def run() { startupComplete() try { while (isRunning) { try { // 从connetions queue 中取出 New connection 配置相关信息(register OP_READ),初始化配置 configureNewConnections() //处理所有响应client的 io write //(request…
1. Kafka.scala 在Kafka的main入口中startup KafkaServerStartable, 而KafkaServerStartable这是对KafkaServer的封装 1: val kafkaServerStartble = new KafkaServerStartable(serverConfig) 2: kafkaServerStartble.startup 1: package kafka.server 2: class KafkaServerStartable…
这个虚类是kafka.network.Acceptor和kafka.network.Processor的父类,提供了一个抽象的Sever线程. 它的有趣之处在于为子类的启动和停止提供了线程间的协作机制. 当子类的shutdown方法被调用时,子类可以得知自己被停止,在子类做了适当的处理和清理后,调用自己的shutdownComplete方法,使得对子类shutdown方法的调用从阻塞状态返回,从而使调用线程得知子类的对象已经恰当的停止. 即,在另一个线程中要关闭一个AbstractServerT…
Kafka工作流程分析 生产过程分析 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率). 分区(Partition) Kafka集群有多个消息代理服务器(broker-server)组成,发布到Kafka集群的每条消息都有一个类别,用主题(topic)来表示.通常,不同应用产生不同类型的数据,可以设置不同的主题.一个主题一般会有多个消息的订…
持续更新中,敬请关注! 目录 <Kafka源码分析>系列文章计划按"数据传递"的顺序写作,即:先分析生产者,其次分析Server端的数据处理,然后分析消费者,最后再补充部分事务和流式计算相关内容. 一. 概述 介绍Kafka的背景.定位.基本思想及原理以及源码结构等内容. 二. 生产者 (Writing) 分析生产者的线程模型.压缩机制等方面内容. 三. Server端-消息存储 (待写作) 承接上一篇生产者文章,分析Producer发来的消息在Server端是如何存的.…
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 实际问题 二. 什么是Kafka, 如何解决这些问题的 三. 基本原理 1. 基本框架 2. Topic 3. Partition 和 Consumer Group 4. Replica 5. Broker & KafkaController 五. 源码结构 1. 源码地址 2. 目录结构 六. 总结 一. 实际问题 我们在业务开发的过程中,会涉及很多"事件驱动"…
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 业务模型 1.1 概念梳理 1.2 文件分析 1.2.1 数据目录 1.2.2 .log文件 1.2.3 .index和.timeindex文件 1.3 顺序IO 1.4 端到端压缩 二. 源码结构 2.1 核心类 2.1.1 核心类之间的关系 2.1.1 数据传递对象 2.1.2 ReplicaManager 2.1.3 Partition 2.1.4 Replica 2.1.…
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition. Offset 消息在Partition中的编号,编号顺序不跨Partition(在Partition内有序). Consumer 用于从Broker中取出/消费Message. Producer 用于往Broker中发送/生产Me…