Jafka来源分析——文章
Kafka它是一个分布式消息中间件,我们可以大致分为三个部分:Producer、Broker和Consumer。当中,Producer负责产生消息并负责将消息发送给Kafka;Broker能够简单的理解为Kafka集群中的每一台机器,其负责完毕消息队列的主要功能(接收消息、消息的持久化存储、为Consumer提供消息、消息清理.....)。Consumer从Broker获取消息并进行兴许的操作。每一个broker会有一个ID标识,该标识由人工在配置文件里配置。
Kafka中的消息隶属于topic,topic能够简单的理解为分组。在topic内部,消息会划分为分区(partition)。
对于partition可能难以理解。至少我读程序的时候一直没有弄明确partition的编号到底是怎么确定的,这里多说一下。
在broker的配置文件server.properties中有配置项開始的数字。
Broker依照以下的原则组织该机器的消息队列。
首先,为每个topic的每个partition创建一个文件夹,命名格式为topic-partition。
Broker对于topic-partition的消息进行分段(segment)存储。每个segment的命名格式每个segment的偏移量(offet)。文件夹的组织结构详细例如以下图所看到的:
Kafka每一条Message的格式:
Length(4byte)
MagicValue(1byte)
Attribute(1byte)
CRC校验码(4byte)
payload(消息的内容)
当中magicvalue=1,Attribute表明消息是否採用压缩以及採用何种压缩方式,crc为payload的crc校验码。
消息在kafka的持久化存储文件里新增了一个域:消息的长度,详细的格式例如以下所看到的:
当中,ByteBufferMessageSet和FileMessageSet都是採用上面的格式进行存储的。
注意Kafka对消息进行压缩的过程。Kafka对消息进行压缩时是对一组Message进行压缩的,其处理步骤例如以下。
首先将每一条Message序列化到一个byte数组,然后将压缩后的byte数组再组成一条新的Message,其详细格式例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenVvY2hhbnhpYW9oZXNoYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
注意FileMessageSet中的offset是指该messageset在File起始位置,这是文件的详细位置。
Jafka来源分析——文章的更多相关文章
- Jafka来源分析——Processor
Jafka Acceptor接受client而建立后的连接请求,Acceptor会将Socket连接交给Processor进行处理.Processor通过下面的处理步骤进行client请求的处理: 1 ...
- 写了一篇关于 FastAdmin 插件路由的分析文章
写了一篇关于 FastAdmin 插件路由的分析文章 插件路由演示 ThinkPHP 的路由就像是整个应用的调度室,让你的应用 url 更友好,而且让应用更安全,不会让真实的地址暴露出去. 了解过 L ...
- 【JUnit4.10来源分析】6 Runner
org.junit.runner.Runner它是JUnit作业引擎.它在许多类型的支持下的.处理试验和生产(Description).Failure和Result和其它输出. Runner参见图主类 ...
- 许令波老师的java的IO机制分析文章
深入分析 Java I/O 的工作机制 I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可 ...
- 【JUnit4.10来源分析】0导航
JUnit靠GOF 中的一个Erich Gamma和 Kent Beck 单元测试框架编写一个开源,yqj2065分析JUnit的主要目的是源 中学习对设计模式的运用. JUnit也是一个学习Java ...
- SDL2来源分析3:渲染(SDL_Renderer)
===================================================== SDL源代码分析系列文章上市: SDL2源码分析1:初始化(SDL_Init()) SDL2 ...
- SDL2来源分析7:演出(SDL_RenderPresent())
===================================================== SDL源代码分析系列文章上市: SDL2源码分析1:初始化(SDL_Init()) SDL2 ...
- AsyncTask来源分析(一)
于android开发过程AsyncTask我会经常处理它.在网上,也有很多的其描述,因此,这里是不是说的用法,直接写自己的学习经验,以及它的一些浅显的认识,忘记错批评. AsyncTask它是一个抽象 ...
- JUnit4.8.2来源分析-2 org.junit.runner.Request
JUnit4.8.2源代码,最为yqj2065兴趣是org.junit.runner.Request,现在是几点意味着它? ①封装JUnit的输入 JUnit4作为信息处理单元,它的输入是单元測试类- ...
随机推荐
- C语言中.h和.c文件解析(很精彩)
C语言中.h和.c文件解析(很精彩) 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析 ...
- Struts, Namespace用法
最近在用SSH框架做一个项目,在使用Struts 的namespace时遇到不少问题,现在就对struts namespace 做一个简单的介绍吧.(本文从项目结构展开叙述) (第1次写博客, 写的不 ...
- redis入门教程
21) Redis 简介Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库.2) 数据类型2.1. Redis 的 KeyRedi ...
- 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)
[题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...
- 在android4.0中实现View的拖动效果
实现方法: 首先需要定义一个支持拖动的源组件和一个作为Drop区域的目标组件. 在支持拖动的组件中注册OnTouchListener 或LongClickListener监听事件,构建一个ClipDa ...
- [LeetCode] Super Ugly Number (Medium)
Super Ugly Number 最后WA没做出来. typedef long long int64; #define MAXBOUND 10000000 class Solution { publ ...
- Jsoup 解析 HTML
Jsoup 文档 方法 要取得一个属性的值,可以使用Node.attr(String key) 方法 对于一个元素中的文本,可以使用Element.text()方法 对于要取得元素或属性中的HTML内 ...
- B*tree dump
Oracle的索引是以平衡树的方式组织存储的:保存的是索引列的值,以及该行的rowid的一部分(文件号,块号,行号) 下面我们通过例子来了解一下: 1,create table test(id int ...
- 【HDOJ】1867 A + B for you again
KMP算法的应用. #include <stdio.h> #include <string.h> #define MAXNUM 100005 char src[MAXNUM], ...
- 【原创】如何构建MIPS交叉编译工具链
运行环境:Ubuntu12.04PC提前安装库:flex,bison,libncureses5-dev,texinfo,这些库提前apt-get install.需要重新安装:gawk(先apt-ge ...