Kafka “高性能” mirc-batch

前言

最开始在Kafka 概述中提到了mirc-batch(微批处理),mirc-batch是Kafka 高性能的一个非常重要的原因,这一下子就使Kafka 成为了一个拥有近乎流式处理框架的的高吞吐级别,但是mirc相对于流式处理还是存在很大差异的,但是一些所谓的流式处理框架使用的也有mirc-batch(比如说spark Streaming),当然啦一些正统的流式处理框架,比如说storm、Flink使用的都是典型的流式处理。
本文按照 批处理、微批处理、流式处理来说一下为什么Kafka选择了micr-batch。
在介绍之前先说一下几个经典概念:

响应时间:

响应时间通常是评定一个系统或者网站最直观的感受,狭义上来说响应时间是指系统对于请求作出响应的时间,但是现在对于响应时间有了更多表现,比如说前端的首屏加载时长等,也是对于响应时间的综合表现(不仅是一个单系统服务,更多是各方综合的结果)。

吞吐量&高吞吐:

吞吐量最直观的概念是指系统在单位时间内所处理请求的数量。对于无并发的系统,吞吐量和响应时间是严格的反比关系。历史上并发的出现打破了这个规律,也为提升吞吐量带来的新的生机。对于单用户系统来说,可能响应时间是最重要的,而对于现在互联网大多数服务而言,吞吐量可能是最重要的(当然啦可用性什么也非常重要)。所谓的高吞吐就是说可以持有非常高吞吐量的一个表现了。

时延

标准的定义是指数据经过网络或者链路从一端到另一端的所消耗的时间,时延其实是分很多种的,发送时延、传输时延等,但是其实概念基本上是类似的,从一个点到另一个点,这个点可能是状态也可能是操作与操作之间的时间间隔,在kafka中所指的通常就是消息时延,这个特性对于一个消息系统来说是十分重要的,比如producer所能提交消息的速度。这个在kafka里和吞吐量是十分相关的。

时延和吞吐量通常是无法同时兼顾的,我们在提升一个指标的同时,可能要牺牲另一个,所以要根据具体的业务场景来做一个衡量。

批处理

批处理是指一改当初串行处理的模式,作业出现后就立马进行处理,而是说按批次对于作业(请求)进行处理。批处理具有一个典型的特点,就是吞吐量高,CPU利用率十分出色。具体来说就是把具体的要处理的数据(作业 || 请求)按照性质或者某些属性进行分组或者分批,再成组或者成批的提交到对应的计算系统。批处理出现的非常早,回一下当初的操作系统可能就对于早期的多道批处理系统&单道批处理系统有印象了。
通常来说,批处理是一种将作业提交给计算系统后就不再干预,通常是非常低的交互性或者根本无交互性可言。业界有非常多经典的实现比如说Hadoop(MapReduce) 计算,根据系统的特性,我们通常会发现批处理所处理的作业或者数据都是些庞大并且离线已经存储好的数据(有界、持久、海量),都是些对实时性几乎没有什么要求的场景,比如大数据报表的生产、模型的训练。

流式处理

流式处理是指对于随时可能进入系统的数据进行计算处理,相对于批处理来说算是种截然不同的处理方式,无需正对整个数据集进行计算操作,而是说来了就干,实时性非常好,处理速度快,结果立马可用,同一时间仅处理一条数据。
常见的流式处理框架有storm、Flink(Spark Streaming 严格意义上来说不算是流式处理),流式处理通常用于,分析监控对实时性要求非常高的系统的错误日志,或者其他以时间为衡量标准的数据流。

微批处理

micr-batch 是一种借鉴了批处理及流式处理的特性,针对吞吐量及时延做了下兼顾(通常是适当的损失时延 来提升吞吐量)。批的数量或者规则不再那么大,而是划分为小批次或者微批次,从而提升吞吐量的同时,对于时延方面,别做出那么大的损失。

来看看Kafka的实现,因为是一个实时的消息系统,所以说纯粹的批处理不现实,比较下单纯串行处理方式吞吐量又不够,所以Kafka 采用了micr-batch的处理方式。重新来看看这张producer的图:

image.png

在producer端消息被生产之后并不是直接发送的,而是在accumulator上缓存一下,然后集中发送出,这样就简单的实现了micr-batch,那带来的改善是什么样子的呢?继续看

比如说Kafka处理一条消息需要2ms,那么对应的吞吐量最多500,时延为2ms。

现在把Kafka 消息不立即发送而是说等一等一块发,等大约8ms,假设这段时间积攒了500条消息。

看一下吞吐量的变化 :5000/(0.002s +0.008s)=50000,提升了大约100倍,如果积攒的消息数量是100条,那么带来的提升就可能是200倍,这个跟kafka producer 消息的生产速度是非常相关的(决定了所能带来的提升,需要根据具体的场景来确定等待的数量,这里producer是通过对应参数来控制的:

batch:

buffer.memory 指定producer待发送消息缓冲区的内存大小,默认32m,如果需要更改就使用这个参数进行修改。这里需要注意的是当producer端写消息的速度超过了专属IO线程发送消息的速度,并且缓冲区的消息数量超过buffer.memory指定的大小时,producer会抛出异常通知用户介入处理,这个缓冲区的大小需要根据实际场景来确定。

batch.size 指一个batch的大小,它直接决定了一个batch中存在的消息数量,这个直接与producer的吞吐量及延时等直接相关。

linger.size

producer端会专门划出一部分内存用于待发送消息的缓存,batch.size决定了发送消息数量,同时间接决定了消息缓存时存在的延时。linger.size 就是针对这一点设计出来的,它决定了消息被投放进缓冲区时是否立马被发送,默认参数是0(立即发送),这个大多数情况下是合理的,但是会很大程度上拉低kafka的吞吐量。

关于上述的一些处理特性,我们除了需要了解之后更好的去使用Kafka,感觉更需要学会这种解决问题的思路,对于一些需要吞吐量的场景也可以去借鉴这种micr-batch 的实现。

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

推荐阅读更多精彩内容

  • 一、Kafka简介 Kafka (科技术语)。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规...
    边学边记阅读 1,752评论 0 14
  • Kafka设计解析(六)- Kafka高性能架构之道 原创文章,转载请务必将下面这段话置于文章开头处。本文转发自技...
    小小少年Boy阅读 2,735评论 0 13
  • 1. 概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用S...
    尼小摩阅读 1,446评论 0 17
  • 目前为止,已经讨论了机器学习和批处理模式的数据挖掘。现在审视持续处理流数据,实时检测其中的事实和模式,好像从湖泊来...
    abel_cao阅读 9,016评论 1 20
  • 自从孩子给我写信明确表示不会去参加考试以来 ,我的情绪波动就一直上下起伏,一方面我固化的思想模式开启,碎碎...
    孙红霞66阅读 142评论 0 0