kafka架构、基本术语、消息存储结构

1.kafka架构

kafka处理消息大概流程

  • 生产者发送消息给kafka服务器
  • 消费者从kafka服务器(broker)读取消息
  • kafka服务器依靠zookeeper集群进行服务协调管理

    2.kafka基本术语

  • message (消息)
    生产消费的基本单位。
  • topic(主题)
    代表逻辑上的一类消息,类似于其它消息队列中间件中的消息队列名称。
  • partition (分区)
    topic的下一级,kafka为了提高吞吐量和可用性,会把一类消息分成多个区存储。topic、partition、message之间的关系如下图:
  • broker
    代表一个kafka服务器节点
  • offset (消息位移值)
    消息位移值一共有两种
    a.第一种是分区内的每条消息都有一个位移值,代表每条消息在文件中的位置,offset从0到消息数量-1,就好比数组的下标。
    b.第二种相对于kafka消费端而言的offset,代表了消费端当前的读取进度,比如消费端offset为3,代表消费者已经消费到了第四条消息。
  • replica (副本)
    kafka为了实现高可用,会对partition(分区)保存多个replica(副本),存在的唯一理由就是为了实现消息的高可靠存储,不让消息丢失。
    其中又分leader 副本和follower副本,follower同步leader副本,leader副本宕机时,从剩余follower副本中选出一个作为新的leader 副本,实现高可用(一个partition的多个副本一定不会在同一个broker上)。
  • ISR (in-sync replica,与leader replica保持同步的replica集合)
    kafka会为每一个partition动态维护一个replica集合,该集合中的replica存储的所有消息日志与leader replica保持同步状态,如果因为网络延迟等原因部分ISR中的replica消息同步进度落后leader replica太多,则会将该replica踢出ISR,等后续追上进度时kafka再将其自动加入ISR。

3.kafka消息存储格式

  • 上文提到topic是消息逻辑上的分类,类似于消息队列的队列名,为了解决消息的高可用和高可靠存储问题引入了partition,将一个partition生成多个副本分散在多台节点上实现高可用。topic是逻辑上的分类,partition是物理上的副本,如图,P1有多个副本分散在broker 1、broker 2、broker 3上,即使其中一台宕机,剩下的两个broker依然可以提供服务(broker 2 和 broker 3的P1_follower会不断从P1_leader进行消息同步,即使主节点宕机也能选举出一个节点为主节点继续服务,并保留截止到高水位的消息,高水位概念在下一篇关于kafka的高可靠存储会提到)。
  • broker的partition还可以继续细分为segement,每个partition在磁盘上对应着一个目录,目录名为topic名称+有序序号,例如名为test的topic下创建了三个partition,三个分区在/tmp/kafka-logs下的目录名分别为test-01、test-02、test-03。
  • 如果进入test-01目录,会发现如下文件列表:
00000000000000000000.index
00000000000000000000.log
00000000000000170410.index
00000000000000170410.log
00000000000000239430.index
00000000000000239430.log  

以上是segement文件列表,segement文件由索引文件(.index)和日志文件(.log)组成,大家会发现文件名是一个整数编号,20个整数数值组成,不足位数补零。第一个segement文件名从0开始,当log文件消息数量达到阈值,就会新建另一个segement文件,这个segement文件的名称是上一个segement log文件最后一条消息的offset位移值。

kafka为什么要这样设计segement文件?
假如我们把所有消息都存在一个文件里,查找一条offset为00000012564868789012的消息需要从头遍历岂不是等到黄花菜都凉了,可以看到这里用到二分查找进行优化,将需要查找的offset和segement的文件名进行二分查找就可以快速定位到我要找的消息在哪个文件里面,然后再从,index文件中获取到消息是在.log文件的哪个位置开始,哪个位置截止,将查找的时间复杂度从O(n)变为O(logn)。

partition目录下segement文件的设计,和mysql的b+树查找数据页、数据页内根据页目录进一步二分查找原理很相似,segement文件名相当于mysql的目录项页(枝干节点),而index文件相当于页内的页目录。

原文地址:https://www.cnblogs.com/powerjiajun/p/11470439.html

时间: 2024-10-25 03:33:00

kafka架构、基本术语、消息存储结构的相关文章

分布式公布订阅消息系统 Kafka 架构设计

我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础. 如今它已为多家不同类型的公司 作为多种类型的数据管道(data pipeline)和消息系统使用. 活动流数据是全部站点在对其站点使用情况做报表时要用到的数据中最常规的部分.活动数据包含页面訪问量(page view).被查看内容方面的信息以及搜索情况等内容.这样的数据通常的处理方式是先把各种活动以日志的形式写

分布式发布订阅消息系统 Kafka 架构设计[转]

分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础.现在它已为多家不同类型的公司 作为多种类型的数据管道(data pipeline)和消息系统使用. 活动流数据是所有站点在对其网站使用情况做报表时要用到的数据中最常规的部

分布式发布订阅消息系统 Kafka 架构设计

我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础.现在它已为多家不同类型的公司 作为多种类型的数据管道(data pipeline)和消息系统使用. 活动流数据是所有站点在对其网站使用情况做报表时要用到的数据中最常规的部分.活动数据包括页面访问量(page view).被查看内容方面的信息以及搜索情况等内容.这种数据通常的处理方式是先把各种活动以日志的形式写入某

Kafka架构原理

对于kafka的架构原理我们先提出几个问题? 1.Kafka的topic和分区内部是如何存储的,有什么特点? 2.与传统的消息系统相比,Kafka的消费模型有什么优点? 3.Kafka如何实现分布式的数据存储与数据读取? Kafka架构图 1.kafka名词解释 在一套kafka架构中有多个Producer,多个Broker,多个Consumer,每个Producer可以对应多个Topic,每个Consumer只能对应一个ConsumerGroup. 整个Kafka架构对应一个ZK集群,通过ZK

ASP.NET Core搭建多层网站架构【1-项目结构分层建立】

2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[1-项目结构分层建立] 文章目录 此分支项目代码 此章节介绍了本项目的分层结构,建立了各层级的类库,修改网站项目的启动配置 新建解决方案 新建空白解决方案MSDemo 建立以下解决方案文件夹: 一个解决方案文件夹相当于一个层级,解决方案下是src和tests.而src下分了七个层级,并且每个层级向上依赖,不会出现2.WebCore中的内容依赖5.

分布式发布订阅消息系统Kafka架构设计

我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础.现在它已为多家不同类型的公司作为多种类型的数据管道(data pipeline)和消息系统使用. 活动流数据是所有站点在对其网站使用情况做报表时要用到的数据中最常规的部分.活动数据包括页面访问量(page view).被查看内容方面的信息以及搜索情况等内容.这种数据通常的处理方式是先把各种活动以日志的形式写入某种

Kafka架构

一.Kafka介绍 Kafka是Linkin在2010年开源的分布式发布订阅消息系统,Kafka是高吞吐量的消息订阅系统. 二.Kafka结构 Kafka由三部分构成,producer.broker.consumer,即producer生成消息,broker存储消息,consumer消费消息,其中需要zookeeper保存broker信息和消费信息. 三.Kafka的特征 Kafka是通过Topic的逻辑组织消息,producer通过topic发送消息,而consumer通过group分组和订阅

阿里云大数据架构专业术语

来自大神:http://pengoneeast.blog.163.com/blog/static/55045403201526111648857/ 负载均衡(Server Load Balancer,简称SLB)是对多台云服务器进行流量分发的负载均衡服务.SLB可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性. SLB基本概念 SLB服务主要由3个基本概念组成. LoadBalancer代表一个SLB实例 Listener代表用户定制的负载均衡策略和转发规则 Ba

(四)springmvc+mybatis+zookeeper分布式架构 整合 - maven代码结构

我们接着上一篇文章,针对于dubbo分布式项目进行maven构建,因为我在本地的eclipse中进行了项目构建,代码结构图如下: 代码结构解释: 架构代码如下: 原文地址:http://blog.51cto.com/13568887/2071069