Kakfa揭秘 Day3

Kafka源码概述

今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行。由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的。

总体

首先从总体方式进行一下分析,进入最关键的core。

从源码角度看,最关键的是标红的几个模块。

  1. admin是管理模块,主要管理Topic和Partition相关的东西。

  2. client客户端模块,给客户端(consumer、producer、broker等的总称)提供各种支持功能。

  3. cluster是很关键的模块,KafkaCluster-->Broker-->Partition是Kafka的基本三层物理结构。

  4. Broker模块,在Broker上Kafka是根据topic对数据分类的,一个topic由很多partition构成,不同的partition是分布式存储的。

  5. consumer模块,对于大多数使用者而言,这都是特别重要的部分,如果不想太深入,仅是进行功能应用,那研究这个模块收益会最多。

  6. producer,仅次于consumer的感兴趣,可以看到里面包括sync同步和async异步两种方式。其中包涵了Partitioner,是一个trait,会有不同的算法。

  7. controller,如果要深入底层研究,非常的关键,主要是提供选举功能,副本分配等。

  8. message,大家需要特别关注,其中可以对消息进行压缩。

  9. serialize,序列化。

  10. server,里面有很多的类,是运行的核心,对运行进行控制。KafkaServer 代表了一个Kafka的broker,生命周期中所有事件都由它管理。

入口程序Kafka.scala

这个类特别特别重要,整个cluster的broker启动时,会把它作为启动类。
作为broker主要的启动类,代码非常的简洁:

这个处理大致分为三个部分:

第一步分,加载配置信息,开始进行资源初始化。

第二部分,也就是标红的代码,这个方法非常核心,当中包涵了具体的启动过程。从下面的代码可以看到,这个方法中封装了KafkaServer,是一个门面设计模式。

第三部分,在退出时注册回调,这个和spark streaming中优雅退出是一样的,在jvm退出前销毁资源。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

Kakfa揭秘 Day3 Kafka源码概述的更多相关文章

  1. Kakfa揭秘 Day9 KafkaReceiver源码解析

    Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...

  2. Kakfa揭秘 Day7 Producer源码解密

    Kakfa揭秘 Day7 Producer源码解密 今天我们来研究下Producer.Producer的主要作用就是向Kafka的brokers发送数据.从思考角度,为了简化思考过程,可以简化为一个单 ...

  3. Kakfa揭秘 Day6 Consumer源码解密

    Kakfa揭秘 Day6 Consumer源码解密 今天主要分析下Consumer是怎么来工作的,今天主要是例子出发,对整个过程进行刨析. 简单例子 Example中Consumer.java是一个简 ...

  4. Kafka源码分析(一) - 概述

    系列文章目录 https://zhuanlan.zhihu.com/p/367683572 目录 系列文章目录 一. 实际问题 二. 什么是Kafka, 如何解决这些问题的 三. 基本原理 1. 基本 ...

  5. Spark Streaming揭秘 Day22 架构源码图解

    Spark Streaming揭秘 Day22 架构源码图解 今天主要是通过图解的方式,对SparkStreaming的架构进行一下回顾. 下面这个是其官方标准的流程描述. SparkStreamin ...

  6. Kafka 源码剖析

    1.概述 在对Kafka使用层面掌握后,进一步提升分析其源码是极有必要的.纵观Kafka源码工程结构,不算太复杂,代码量也不算大.分析研究其实现细节难度不算太大.今天笔者给大家分析的是其核心处理模块, ...

  7. Kafka源码分析系列-目录(收藏不迷路)

    持续更新中,敬请关注! 目录 <Kafka源码分析>系列文章计划按"数据传递"的顺序写作,即:先分析生产者,其次分析Server端的数据处理,然后分析消费者,最后再补充 ...

  8. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

  9. MongoDB源码概述——内存管理和存储引擎

    原文地址:http://creator.cnblogs.com/ 数据存储: 之前在介绍Journal的时候有说到为什么MongoDB会先把数据放入内存,而不是直接持久化到数据库存储文件,这与Mong ...

随机推荐

  1. 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

    手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...

  2. 快递鸟电子面单API对接方法?

    之前说了一下快递公司.菜鸟和快递鸟的电子面单接口,很多人不知道快递鸟要怎么对接,现在为大家讲解一下.快递鸟是全球物流接口服务商,为电商 ERP.电商平台.仓储.清关公司提供物流跟踪.电子面单.智选物流 ...

  3. Ubuntu中useradd和adduser的区别

    在Ubuntu中创建新用户,通常会用到两个命令:useradd和adduser,虽然作用一样,但用法却不尽相同.本文接下来便为读者带来具体的解释. AD:51CTO学院:IT精品课程在线看! 在Ubu ...

  4. SSIS 学习(8):事务【转】

    事务,在数据库开发与应用中,发挥了重要的作用,但在Integration Services 包开发过程中,我们还一直没有提到过这个概念,它是不是还是如此,能让各数据库兄弟和睦相处,团结一致,同进退.共 ...

  5. ios数据缓存方法

    转载自:http://zhidao.baidu.com/link?url=jNTz6lkL1way8bJ-WPY197Pe9aEM_ql-MZbVJsM5tXr7Mv82W70QQ5a9UlvhMMS ...

  6. [改善Java代码]静态变量一定要先声明后赋值

    建议32: 静态变量一定要先声明后赋值 这标题看着让人很纳闷,什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们先来看一个例子,代码如下 ...

  7. 【转】APP测试要点

    APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1.安装和卸载 ●应用是否可以在IOS不同系统版本或android不同系统版 ...

  8. HTML-块级元素和内联元素

    HTML-块级元素和内联元素 块级元素 内联元素 address - 地址 block - 块引用 center - 居中对齐块(不推荐) dir - 目录列表(HTML5踢出) div - 常用的不 ...

  9. 初识Less(2015年05月23日)

    因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come  on...... 一.简介 ...

  10. 在虚拟机中安装Linux

    安装CentOS 6.4教程(详细步骤) CentOS是RHEL的克隆版本,功能上是一模一样的,另外重新编译之后还修复了一些后者的bug.主要区别就是CentOS免费,但没有官方的技术支持,而RHEL ...