Kafka Note(三)高吞吐王牌杀手锏

(三)kafka高吞吐王牌杀手锏

A. 顺序读写

  • 影响因素

    • 机械硬盘的io有两个阶段,分别为寻址 & 写入。
    • 寻址:物理动作,通过旋转和磁臂找到对应扇区,其动作较慢,耗时是毫秒级。
    • 写入:数据的写入阶段很快,非优化重点方向。
  • 核心效果:producer倾倒消息时是不断追加到文件的形式,因此kafka利用追加写入完成磁盘顺序读写,减少磁盘磁头寻道时间,远快于随机读写。

  • 补充说明:linux io调度有4种方法

    • NOOP(先进先出的队列)
    • CFQ(默认方法,根据io请求的地址排序,但是这导致小的io动作如果地址靠后的话就需要一直等待)
    • DEADLINE(CFQ的升级版,设置了等待时间的上限)
    • ANTICIPATORY(每个io请求都等6ms,如果这个时间内收到了地址相近的操作就合并一起)

B. 零拷贝zero copy

  • 核心效果:基于linux的send file命令,减少内核态到用户态之间的拷贝。

  • 具体流程

    1. 在内核态kernel中操作,将数据从disk复制到memory buffer,在kafka的场景下,其实数据从disk走到了page cache;
    2. 从page cache中把数据传递到socket buffer,最后给到nic buffer发出去。
  • 优势:上述两步操作都在内核态kernel中完成,若没有send file机制数据需要从第一步的page cache拷贝到用户态的kafka应用中,然后再从kafka应用中拷贝到内核态的socket buffer中,多了两次拷贝动作。

C. 页缓存page cache

  • 核心效果:数据在内存memory中的读写速度高于在磁盘disk下的读写速度,而page cache就是利用内存空间来实现提速的。
  • 具体流程:结合上方的zero copy,kafka完成了数据传输的“空中接力”。
    1. 生产者将数据发送到broker;
    2. broker将数据先存至page cache,再刷入磁盘;
    3. 消费者此时若拉取数据,数据可基于send file,在broker上直接从page cache中到socket buffer,再从nic buffer送出;
    4. 消费者凭借zero copy,结合page cache的加速更快获得数据。
  • 注意点:kafka会用到大量memory作为page cache,所以linux的swap空间会被使用起来,一些不活跃的进程被放入了swap

D. 分区机制partition

1. 分区过多会破坏Kafka追加写

  • partition底层对应的是一个或多个segment文件,若分区过多会导致有大量segment文件。虽然每个文件单独看都是追加写的模式,但是系统宏观角度下会切换写入多个segment文件,这样寻址成本等于是随机io(rocketMQ对此作了优化,所有分区数据写入一个commitLog)。
  • 若kafka部署在云盘或者使用ssd就不用担心该问题,前者走带宽,后者不需要物理寻址。

2. Kafka数据存储结构

  • Topic & partition:Topic由大量partitions构成,利用分布式结构分散在不同broker节点上增加并行能力,而提升partition可以进一步利用并发能力,随着增加对应下有消费者数目,尽可能地提升吞吐量。

  • 存储的微观单位:每个partition有单独的目录,目录下又被具体分为多个segments,单个segment由一对文件——索引文件 & 数据文件。默认情况下segment的数据文件大小为log.segment.bytes=1073741824,即1gb。

    1. 索引文件:0000000.index,其名称为该段的起始索引号,总体采用是稀疏索引的方式。索引文件由message索引号(从1开始)和该message的末尾offset组成。

      Message index Message position annotation
      1 0 第一条空的
      3 4597 稀疏index,直接index=3
      6 9807
    2. 数据文件:0000000.log,保存上方索引文件对应的数据内容,由数据和position组成。

      message data Message position annotation
      Message1 data part 0 第一条空的
      Message2 data part 2039 数据文件不可能稀疏,完整记载末尾的offset是多少
      Message3 data part 4597 对应index=3的情况
      Message4 data part 6830
      Message5 data part 7912
      Message6 data part 9807 对应index=6的情况
  • 删除机制

    1. 周期检查:broker server周期性地检测和删除不符合保留条件的segments,具体周期根据配置的log.retention.check.interval.ms参数,默认为5分钟。
    2. 基于时间保留:基于配置的log.retention.ms | log.retention.minutes | log.retention.hours(若都配置了,优先级罗列的这个顺序逐级降低),默认168hours(7天)。非激活状态下的segment超过这个时长后,会被清理。
    3. 基于文件大小保留:基于log.retention.bytes的配置,目录下所有segments的数据文件大小若大于这个值,则删除最早的segment。

E. 其他手段

  • 批量发送:生产者客户端缓存消息后批量发送给broker,消费者也批量从broker拉取数据,减少网络上的io次数。
  • 网络瓶颈:kafka的核心性能瓶颈不是cpu、磁盘,而是网络带宽,需尽可能的压缩数据(下个主题对kafka的网络进行了阐述说明)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容