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作为信息处理单元,它的输入是单元測试类- ...
随机推荐
- 织梦中limit的用法详解(调用指定id下的指定文章)
limit的用法大致可以理解为:调用指定id下的指定文章. 下面为代码片段,需要的朋友自行拿去: {dede:arclist typeid='6' row='1' limit='0,1'} <l ...
- django入门教程(下)
在两篇文章帮你入门Django(上)一文中,我们已经做了一个简单的小网站,实现了保存用户数据到数据库,以及从后台数据库读取数据显示到网页上这两个功能. 看上去没有什么问题了,不过我们可以让它变得更加完 ...
- Django 安全策略的 7 条总结!
Florian Apolloner 发言主题为 Django 安全,其中并未讨论针对 SSL 协议的攻击--因为那不在 Django 涉及范围内.(如感兴趣可参考 https://www.ssllab ...
- Swifter初体验;按照惯例,来一个Swift版本的:iOS图片验证码?
不多解释,上图,上代码:代码
- SPRING IN ACTION 第4版笔记-第二章WIRING BEANS-006-当构造函数有集合时的注入
一.当构造函数有集合时,只能用<CONSTRUCTOR-ARG>,不能用C-NAMESPACE 二. 1. package soundsystem.collections; import ...
- QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源
140种事件类型: QEvent::None QEvent::AccessibilityDescription QEvent::AccessibilityHelp QEvent::Accessibil ...
- USACO3.34Home on the Range(DP)
之前做过一道类似的 国际象棋盘神马的.. 统计出以每个1作为右下角的最大正方形 那么以大于二到这个最大值之间为边的正方形都可以以这个为右下角 累加就可以了 dp[i][j] = min(dp[i-1] ...
- android webview js交互 第一节 (java和js交互)
转载请注明出处 挺帅的移动开发专栏 http://blog.csdn.net/wangtingshuai/article/details/8631835 在androi ...
- Makefile 自动生成依赖
虽然以前对Makefile有个基本概念,但是真正到自己去写一个哪怕是简单的Makefile时也会遇到不少的麻烦. 现在我有如下文件 dList.h dList.c memory.c debug. ...
- GeoServer基础教程(一):环境搭建篇
转自:http://imxz.me/tech/3sdev/installation-of-geoserver.html GeoServer的是一个基于Java的软件,它允许用户查看和编辑地理空间数据, ...