注:本文依赖于kafka-0.10.0.1-src

  kafka消息格式是经过多个版本的演变的,本文只说0.10.0.1版本的消息格式。

  消息格式如图1所示:

  

  图1

  CRC:用于校验消息内容。占4个字节

  MAGIC:用于标识kafka版本,默认是1。占1个字节

  ATTRIBUTES:用于存储消息压缩使用的编码以及Timestamp类型。这个版本仅支持 gzip、snappy、lz4三种压缩格式。后三位如果是000则表示没有使用压缩,如果是001则表示是gzip压缩,如果是010则是snappy压缩,如果是011则是snappy压缩。第4位(从右数)如果为0,代表使用create time,如果为1代表append time。其余位保留。占1个字节

  TIMESTAMP:时间戳。占8个字节

  KEY_SIZE:用于标识KEY内容的长度K。占用4个字节

  KEY:存储的是KEY的具体内容。占用K个字节。

  VALUE_SIZE:主要标识VALUE的内容的长度V。占用4个字节。

  VALUE:消息的真实内容。占用V个字节

  Record实际上是用Java NIO ByteBuffer存储的,那我们如何将一个消息写入到Record的ByteBuffer里面呢?

  说简单点,其实就是把上面说的字段给Record传过来然后依次放入ByteBuffer中就可以了,但这中间利用了Compressor压缩器的压缩功能,我们后续会说一下Compressor压缩器,这里就先不介绍了。

  还有一点,Record的写入是支持数据分包的,也就是一个完整的VALUE值可以通过valueOffset和valueSize来指定偏移和这次写入的数据大小来进行分包操作,这样就可以将一个完整的消息,分成多个Record。如果valueSize是负数,就表示从valueOffset开始到末尾的数据都写入。

​ ​

Kafka-Record(消息格式)的更多相关文章

  1. Kafka的消息格式

    Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...

  2. 一文看懂Kafka消息格式的演变

    摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在不断的升级改进,从0.8.x版本开始到现在的1.1.x版本,Kaf ...

  3. 转载来自朱小厮博客的 一文看懂Kafka消息格式的演变

    转载来自朱小厮博客的 一文看懂Kafka消息格式的演变     ✎摘要 对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化.随着Kafka的迅猛发展,其消息格式也在 ...

  4. kafka客户端发布record(消息)

    kafka客户端发布record(消息)到kafka集群. 新的生产者是线程安全的,在线程之间共享单个生产者实例,通常单例比多个实例要快. 一个简单的例子,使用producer发送一个有序的key/v ...

  5. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  6. DNS消息格式

    一,简介 空谈误国,要让一大堆抽象的DNS概念落地,还是需要了解DNS消息格式的,本文会尽量详细地介绍DNS消息格式的每一个字段. 也可以移步rfc1035了解. 二,概览 DNS消息主要由五部分组成 ...

  7. ELK之使用kafka作为消息队列收集日志

    参考:https://www.cnblogs.com/fengjian2016/p/5841556.html    https://www.cnblogs.com/hei12138/p/7805475 ...

  8. Kafka设计解析(十一)Kafka无消息丢失配置

    转载自 huxihx,原文链接 Kafka无消息丢失配置 目录 一.Producer端二.Consumer端 Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生 ...

  9. Kafka的消息会丢失和重复吗?——如何实现Kafka精确传递一次语义

    我们都知道Kafka的吞吐量很大,但是Kafka究竟会不会丢失消息呢?又会不会重复消费消息呢? 图 无人机实时监控 ​ 有很多公司因为业务要求必须保证消息不丢失.不重复的到达,比如无人机实时监控系统, ...

随机推荐

  1. [Day6]引用数据类型、ArrayList 集合

    1.类的定义与使用 (1)类的定义格式 创建java文件,与类名相同 public class 类名{ 数据类型  属性名称1: 数据类型  属性名称2: … } (2)使用格式 导包:我们将所有的类 ...

  2. 目标检测(三)Fast R-CNN

    作者:Ross Girshick 该论文提出的目标检测算法Fast Region-based Convolutional Network(Fast R-CNN)能够single-stage训练,并且可 ...

  3. vue 中使用 axios 请求接口,请求会发送两次问题

    在开发项目过程中,发现在使用axios调用接口都会有两个请求,第一个请求时,看不到请求参数,也看不到请求的结果:只有第二次请求时才会有相应的请求参数以及请求结果: 那为甚么会有这么一次额外的请求呢,后 ...

  4. ARGB与RGB、RGBA的区别

    ARGB 是一种色彩模式,也就是RGB色彩模式附加上Alpha(透明度)通道,常见于32位位图的存储结构. RGB 色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝(B)三个颜色通道的变 ...

  5. 2018-2019-2 20175313 实验一《Java开发环境的熟悉》实验报告

    一.实验内容及步骤 使用JDK编译.运行简单的Java程序 cd code进入code文件夹 mkdir 20175313创建20175313文件夹 ls查看当前目录 cd 20175313,mkdi ...

  6. Mac同时安装python2和python3

    Mac同时安装python2和python3 Mac自带python2,但因为开发时所用但pythonkennel是3也可能是2,并且就算是python2,版本号也许和内置但python也有所不同.所 ...

  7. kafka8 编写简单消费者

    1.eclipse运行消费者代码.代码如下 package cn.test.mykafka; import java.util.Arrays; import java.util.Properties; ...

  8. JavaBean持久化

    JavaBean持久化并不局限于Swing构件的存储,可以使用该机制存储任意对象的集合,只要遵守一些简单的规则即可. XMLEncoder内置了对下列类型的支持: ●null ●所有基本类型及其包装器 ...

  9. OAuth2认证和授权入门

    OAuth2四种授权方式 四种授权方式 OAuth 2.0定义了四种授权方式. 密码模式(resource owner password credentials) 授权码模式(authorizatio ...

  10. 关于NFS服务器权限的四种情况

    第一种:service 和client 的UID和用户名一样 client按照service端的权限来使用.