Kafka高性能的特点及条件

Kafka是一个高吞吐量分布式消息中间件,并且提供了消息的持久化功能。其高可行有两个重要的特点:

  • 利用了磁盘连续读写性能显著高于随机读写性能的特点
  • 并发,将一个topic拆分为多个partition

磁盘的连续性

要充分利用磁盘连续读写高性能的特点,就意味着要减少操作系统对磁盘的重新调度。kakfa内部的实现非常巧妙:

  • 生产者:网络>pagecache(内存)>磁盘
  • 消费者:磁盘===>网络,使用sendfile将磁盘数据直接拷贝到网卡发送缓冲区

这样的设计使得写磁盘的机会仅仅是pagecache需要flush到磁盘的时候,保证了大多数时候磁盘可以连续地读取,而且直 接复制到网卡,避免消费影响到生产(写入内存)。另外,使用文件系统pagecache而不是自建缓存,还利用pagecache对于sendfile来说是透明的优势,也就是在没有消息堆积时,数据流动实际时pagecahe直接到网卡,减少磁盘io又保证及时消费。

topic的拆分

kafka读写的单位是partition,将一个topic拆分为多个partition提高了系统的吞吐量,这里有一个前提条件是不同的partition要分布在不同在磁盘上。如果多个partition位于一个磁盘上就以为这有多个进程同时对一个磁盘的多个文件进行读写,使得操作系统对磁盘的读写进行频繁的调度,破坏了磁盘读写的连续性。

具体的配置上是将不同磁盘的多个目录配置到broker的log.dirs,例如:

log.dirs=/disk1/logs,/disk2/logs,/disk3/logs

kafka会在新建partition的时候,将新partition分布在partition最少的目录上,因此,一般不能将同一个磁盘的多个目录设置到log.dirs。

kafka在虚拟机环境的优化

kafka在虚拟机环境的优化有三点:

  • 组建较大集群,并保证同一个topic的不同partition位于不同虚拟机(所以在不同的磁盘)
  • 监控,对于消费过慢的partition(所在的broker),暂停写入(生产),等待消费
  • 将kafka安装在系统盘,数据盘(/opt)完全用于消息存储。数据盘上不安装其他服务

内存相关设置

pagecache是linux内核的低优先级缓存,在内存空间富裕的情况下才能获得较大的空间。并且kafka不自建缓存,堆空间需求也比较小。因此建议保留物理内存的1/2以上给系统,以便保证pagecache的分配。

Kafka运行环境优化实践的更多相关文章

  1. Windows上搭建Kafka运行环境

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  2. 漫游Kafka实战篇之搭建Kafka运行环境

    接下来一步一步搭建Kafka运行环境. Step 1: 下载Kafka 点击下载最新的版本并解压. > tar -xzf kafka_2.9.2-0.8.1.1.tgz > cd kafk ...

  3. (转)Windows上搭建Kafka运行环境

    转自:<Windows上搭建Kafka运行环境> 完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过 ...

  4. [转]Windows上搭建Kafka运行环境

    [转]http://www.cnblogs.com/alvingofast/p/kafka_deployment_on_windows.html Windows上搭建Kafka运行环境   完整解决方 ...

  5. 漫游Kafka实战篇之搭建Kafka运行环境(2)

    接下来一步一步搭建Kafka运行环境. Step 1: 下载Kafka 点击下载最新的版本并解压. > tar -xzf kafka_2.9.2-0.8.1.1.tgz > cd kafk ...

  6. kafka之一:Windows上搭建Kafka运行环境

    搭建环境 1. 安装JDK 1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-213315 ...

  7. Windows下搭建kafka运行环境

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  8. Windows上Kafka运行环境安装

    1. 安装JDK 1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK1.2 安装完成后需 ...

  9. 【原】无脑操作:Windows下搭建Kafka运行环境

    Kafka是一种高吞吐量的分布式发布订阅消息系统 1.优点:① 通过磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能.② 高吞吐量:即使是非常普通的硬件Kaf ...

随机推荐

  1. Laravel 5.4+Vue.js 初体验:Laravel下配置运行Vue.js

    生产材料PHP:PHP 5.6+Laravel 5.4:https://github.com/laravel/laravel/releases/Composer:http://getcomposer. ...

  2. 2018.10.18 poj2187Beauty Contest(旋转卡壳)

    传送门 旋转卡壳板子题. 就是求凸包上最远点对. 直接上双指针维护旋转卡壳就行了. 注意要时刻更新最大值. 代码: #include<iostream> #include<cstdi ...

  3. 2018.07.10 NOIP模拟 sort(单调队列)

    Sort 题目背景 SOURCE:NOIP2016-RZZ-4 T1 题目描述 给你一个长度为 n 的排列,小W每次可以选择一个数,做以下操作: 不断把这个数与它右边的数交换. 当它右边没有数,或它右 ...

  4. Java解决高并发方案(帮助你我他)

           一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单.随着互联网业务的不断丰富,网站 ...

  5. SPSS-Friedman 秩和检验-非参数检验-K个相关样本检验 案例解析

    三人行,必有我师,是不是真有我师?三种不同类型的营销手段,最终的营销效果是否一样,随即区组秩和检验带你进入分析世界 今天跟大家讨论和分享一下:spss-Friedman 秩和检验-非参数检验-K个(多 ...

  6. HTML中submit和button的区别

    submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成butt ...

  7. C语言printf的格式

    例1 int a = 12345;printf("%6d",a); // 输出6位不够左边补空格printf("%.6d",a); // 输出6位不够左边补0例 ...

  8. Sensor fusion(传感器融合)

    From Wikipedia, the free encyclopedia 来自维基百科,免费的百科Sensor fusion is combining of sensory data or data ...

  9. java代码中存在的Big Endian 和 Little Endian

    Big Endian 和 Little Endian 详解 Java中的Big(Little)-endian问题的一种解决方法 主机序和网络序  很重要很重要 几种ip存放形式 Big-Endian和 ...

  10. html监听,键盘事件

    <script type="text/javascript" language=JavaScript charset="UTF-8">      v ...