`

Jafka学习之基本概念

    博客分类:
  • mq
 
阅读更多
  • 消息: 全称为Message,是指在生产者、服务端和消费者之间传输数据。
  • 消息代理:全称为Message Broker,通俗来讲就是指该MQ的服务端或者说服务器。
  • 消息生产者:全称为Message Producer,负责产生消息并发送消息到meta服务器。
  • 消息消费者:全称为Message Consumer,负责消息的消费。
  • 消息的主题:全称为Message Topic,由用户定义并在Broker上配置。producer发送消息到某个topic下,consumer从某个topic下消费消息。
  • 主题的分区:也称为partition,可以把一个topic分为多个分区。每个分区是一个有序,不可变的,顺序递增的commit log
  • 消费者分组:全称为Consumer Group,由多个消费者组成,共同消费一个topic下的消息,每个消费者消费部分消息。这些消费者就组成一个分组,拥有同一个分组名称,通常也称为消费者集群
  • 偏移量:全称为Offset。分区中的消息都有一个递增的id,我们称之为Offset。它唯一标识了分区中的消息。
       Kafka是一个分布式的消息中间件,可以粗略的将其划分为三部分:ProducerBrokerConsumer。其中,Producer负责产生消息并负责将消息发送给KafkaBroker可以简单的理解为Kafka集群中的每一台机器,其负责完成消息队列的主要功能(接收消息、消息的持久化存储、为Consumer提供消息、消息清理.....)ConsumerBroker获取消息并进行后续的操作。每个broker会有一个ID标识,该标识由人工在配置文件中配置。

         Kafka中的消息隶属于topic,topic可以简单的理解为分组。在topic内部,消息会划分为分区(partition)。对于partition可能难以理解,至少我读程序的时候一直没有弄明白partition的编号究竟是怎么确定的,这里多说一下。在broker的配置文件server.properties中有配置项num.partitions和topic.partition.count.map。 num.partitions是该broker每一个topic默认的partition数目(设为N);topic.partition.count.map针对每一个topic设置partition数目(设为N)。Broker根据设置的数目在该机器为topic创建[0,1...N-1]N个partition。所以,partition的命名可以理解为由两部分组成,brokerId和partitionNum,其中partitionNum是从0开始的数字。

         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表明消息是否采用压缩以及采用何种压缩方式,crcpayloadcrc校验码。消息在kafka的持久化存储文件中新增了一个域:消息的长度,具体的格式如下所示:

    

     
其中,ByteBufferMessageSetFileMessageSet都是采用上面的格式进行存储的。

 

 

注意Kafka对消息进行压缩的过程。Kafka对消息进行压缩时是对一组Message进行压缩的,其处理过程如下。首先将每一条Message序列化到一个byte数组,然后将压缩后的byte数组再组成一条新的Message,其具体格式如下:

    

 

   注意FileMessageSet中的offset是指该messagesetFile中的起始位置,是文件中的具体位置。

  • 大小: 25.1 KB
  • 大小: 20.2 KB
  • 大小: 21.6 KB
  • 大小: 64.9 KB
分享到:
评论

相关推荐

    jafka:快速,简单的分布式发布-订阅消息系统(mq)

    #A快速分布式消息传递系统(MQ) Jafka mq是从克隆的分布式发布-订阅消息系统。 因此它具有以下功能: 具有O(1)磁盘结构的持久消息传递即使在存储大量TB消息的情况下也能提供恒定的时间性能。 高吞吐量:即使使用...

    jafka, 一种快速简单的分布式发布订阅消息系统( mq ).zip

    jafka, 一种快速简单的分布式发布订阅消息系统( mq ) #A 快速分布式邮件系统( MQ ) Jafka是一个分布式发布订阅消息系统,从 Apache 克隆。因此,它具有以下特性:具有 O(1) 磁盘结构的持久消息传递,即使有大量的...

    kafka学习文档

    关亍 kafka 的基本知识,分布式的基础:《分布式消息系统 Kafka 刜步》 kafka 的分布式搭建,quick start:《kafka 分布式环境搭建》 关亍 kafka 的实现细节,返主要就是讲 design 的部分:《细节上》、《细节下》 ...

    kafka核心概念 message queue

    Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在 Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下 进行消息持久化;高...

    藏经阁-美团点评高级技术专家 郑刚在QCon上做了主题为《美团点评旅游推荐系统的演进》的演讲,就美团点评酒旅业务简介与基于用户画

    常见的开源技术有Fluentd、Flume、Apollo、Chukwa、Sqoop、DataX、MySQLStreamer、Canal、Scribe、ZeroMQ、ActiveMQ、Logstash、RabbitMQ、Jafka、Storm、Samza、Heron、Spark、Flink等。这些技术都有其优缺点,需要...

    Kafka介绍.pptx

    #### Kafka的基本概念 - **Producer**:消息生产者,负责向特定的Topic发布消息。 - **Consumer**:消息消费者,订阅特定的Topic并处理其中的消息。 - **Broker**:Kafka集群中的服务器,负责接收、存储并转发消息。...

    java8集合源码分析-notes:读书笔记

    zeromq的作者之一用C语言重写的通信框架, OpenMQ Open-MQ 是一个开源的消息中间件,类似IBM的 WebSphere MQ(MQSeries),采用 C++ 和 Qt 库编写的,支持Windows、Unix 以及 Mac OS 平台,支持 JMS。 ZeroMQ ZeroMQ...

    RabbitMQ技术详解

    - **Jafka/Kafka**:LinkedIn开源的分布式消息队列,具备高性能和高吞吐量,适合大数据和实时流处理场景。 选择哪种消息中间件取决于具体的应用需求,如数据规模、性能需求、平台兼容性和持久化要求。在评估和选择...

    藏经阁-海尔实时计算平台技术选型与实践.pdf

    海尔电器公司在实时计算平台的建设中选择了多种开源技术,包括Fluentd、Flume、Apollo、Chukwa、Sqoop、DataX、MySQL Streamer、Canal、Scribe、ZeroMQ、ActiveMQ、Logstash、RabbitMQ、Jafka、Storm、Samza、Heron...

Global site tag (gtag.js) - Google Analytics