kafka中的offset

栏目: IT技术 · 发布时间: 5年前

内容简介:kafka中的offset

官方文档定义:kafka是一个分布式、可分区、多副本的日志系统。

kafka术语:

  • massage: kafka中最基本的传递对象,有固定格式。
  • topic: 一类消息,如page view,click行为等。
  • producer: 产生信息的主体,可以是服务器日志信息等。
  • consumer: 消费producer产生话题消息的主体。
  • broker: 消息处理结点,多个broker组成kafka集群。
  • partition: topic的物理分组,每个partition都是一个有序队列。
  • segment: 多个大小相等的段组成了一个partition。
  • offset: 一个连续的用于定位被追加到分区的每一个消息的序列号,最大值为64位的long大小,19位数字字符长度。

对于一个消息系统而言,追踪客户消费了什么,也即消息消费状态是每个消息系统必须提供的关键功能之一。
系统可以提供的几种可能消息传递保障有3种:

  • At most once 消息至多会被发送一次,但如果产生网络延迟等原因消息就会有丢失。
  • At least once 消息至少会被发送一次,上面既然有消息会丢失,那么给它加一个消息确认机制即可解决,但是消息确认阶段也还会出现同样问题,这样消息就有可能被发送两次。
  • Exactly once 消息只会被发送一次,这是我们想要的效果。

那么kafka是怎么解决的呢?
kafka的解决方案:

  • broker将数据流划分为一组互相独立的分区。这些分区的语义由producer定义,由producer指定每条消息属于哪个分区。一个分区内的消息以到达broker的时间为准排序,将来按此顺序将消息发送给consumer。这样一来,就用不着为每一条消息保存一条元数据(比如标记该消息已使用)了,我们只需要为producer、topic、partition的每种组合记录一个“最高水位标记”(high water mark)即可。我们把这个最高水位标记称作偏移量offset。

topic、partition、segment、offset的关系:

  • partition、segment、offset都是为topic服务的,每个topic可以分为多个partition,一个partition相当于一个大目录,每个partition下面有多个大小相等的segment文件,这个segment是由message组成的,而每一个的segment不一定由大小相等的message组成。segment大小及生命周期在server.properties文件中配置。offset用于定位位于段里的唯一消息。

kafka中的offset

接下来弄清楚segment具体细节之后再说offset:

  • segment由index和data文件组成,两个文件成对出现,分别存储索引和数据。
  • segment文件命名规则:对于所有的partition来说,segment名称从0开始,之后的每一个segment名称为上一个segment文件最后一条消息的offset值。

那么对于分区中的一个offset例如等于345552怎么去查找相应的message呢?

  • 先找到该message所在的segment文件,通过二分查找的方式寻找小于等于345552的offset,假如叫S的segment符合要求,如果S等于345552则S上一个segment的最后一个message即为所求;如果S小于345552则依次遍历当前segment即可找到。

实际上offset的存储采用了稀疏索引,这样对于稠密索引来说节省了存储空间,但代价是查找费点时间。
稀疏索引与稠密索引


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

标签: kafka中的offset

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript语言精粹

JavaScript语言精粹

道格拉斯•克罗克福德 (Douglas Crockford) / 赵泽欣、鄢学鹍 / 电子工业出版社 / 2012-9-1 / 49.00元

JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门优秀的语言。Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看......一起来看看 《JavaScript语言精粹》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具