kafka学习笔记

Table of Contents

定义

一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统或当做MQ。
Apache基金会顶级开源项目。

部分名称解释

Broker

消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。

Topic

一类消息,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。

Partition

topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。

Segment

partition物理上由多个segment组成

Offset

每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。 partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息.

topic中的partition

同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,
第一个partiton序号从0开始,序号最大值为partitions数量减1。

partiton中的segment

每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。
但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。

segment结构

segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,
成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。
数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

设计特点

  • Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。
  • 通过索引信息可以快速定位message和确定response的最大大小。
  • 通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。
  • 通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

备注

写message
消息从java堆转入page cache(即物理内存)。
由异步线程刷盘,消息从page cache刷入磁盘。


读message
消息直接从page cache转入socket发送出去。
当从page cache没有找到相应数据时,此时会产生磁盘IO,从磁
盘Load消息到page cache,然后直接从socket发出去
参考网址:http://tech.meituan.com/kafka-fs-design-theory.html

Author: josephzeng

Last Updated 2016-03-26. Created by Emacs 24.5.1 (Org mode 8.2.10)

Validate