漫游Kafka设计篇之效率优化,漫游kafka效率


原文地址:http://blog.csdn.net/honglei915/article/details/37564757

Kafka在提高效率方面做了很大努力。Kafka的一个主要使用场景是处理网站活动日志,吞吐量是非常大的,每个页面都会产生好多次写操作。读方面,假设每个消息只被消费一次,读的量的也是很大的,Kafka也尽量使读的操作更轻量化。

我们之前讨论了磁盘的性能问题,线性读写的情况下影响磁盘性能问题大约有两个方面:太多的琐碎的I/O操作和太多的字节拷贝。I/O问题发生在客户端和服务端之间,也发生在服务端内部的持久化的操作中。
消息集(message set)
为了避免这些问题,Kafka建立了“消息集(message set)”的概念,将消息组织到一起,作为处理的单位。以消息集为单位处理消息,比以单个的消息为单位处理,会提升不少性能。Producer把消息集一块发送给服务端,而不是一条条的发送;服务端把消息集一次性的追加到日志文件中,这样减少了琐碎的I/O操作。consumer也可以一次性的请求一个消息集。
另外一个性能优化是在字节拷贝方面。在低负载的情况下这不是问题,但是在高负载的情况下它的影响还是很大的。为了避免这个问题,Kafka使用了标准的二进制消息格式,这个格式可以在producer,broker和producer之间共享而无需做任何改动。
zero copy
Broker维护的消息日志仅仅是一些目录文件,消息集以固定队的格式写入到日志文件中,这个格式producer和consumer是共享的,这使得Kafka可以一个很重要的点进行优化:消息在网络上的传递。现代的unix操作系统提供了高性能的将数据从页面缓存发送到socket的系统函数,在linux中,这个函数是sendfile.
为了更好的理解sendfile的好处,我们先来看下一般将数据从文件发送到socket的数据流向:

这显然是低效率的,有4次拷贝和2次系统调用。Sendfile通过直接将数据从页面缓存发送网卡接口缓存,避免了重复拷贝,大大的优化了性能。
在一个多consumers的场景里,数据仅仅被拷贝到页面缓存一次而不是每次消费消息的时候都重复的进行拷贝。这使得消息以近乎网络带宽的速率发送出去。这样在磁盘层面你几乎看不到任何的读操作,因为数据都是从页面缓存中直接发送到网络上去了。
这篇文章详细介绍了sendfile和zero-copy技术在Java方面的应用。
数据压缩
很多时候,性能的瓶颈并非CPU或者硬盘而是网络带宽,对于需要在数据中心之间传送大量数据的应用更是如此。当然用户可以在没有Kafka支持的情况下各自压缩自己的消息,但是这将导致较低的压缩率,因为相比于将消息单独压缩,将大量文件压缩在一起才能起到最好的压缩效果。
Kafka采用了端到端的压缩:因为有“消息集”的概念,客户端的消息可以一起被压缩后送到服务端,并以压缩后的格式写入日志文件,以压缩的格式发送到consumer,消息从producer发出到consumer拿到都被是压缩的,只有在consumer使用的时候才被解压缩,所以叫做“端到端的压缩”。
Kafka支持GZIP和Snappy压缩协议。更详细的内容可以查看这里。


DNF(70版本)男漫游单刷怎提高效率?打出高伤害

漫游不花钱 恩 可以 首先升级嘛 别需求那么多装备啥的 先用任务的混着 前期也没啥好装备 现在50的一身流光都过时了 竟然不PK需求那么高干嘛 可以跟别人组队一起刷的嘛 游戏就是娱乐的 而不是砸钱的 你等级到了60买一身西部吧(真西部你暂时买不起 所以买个普通的) 首饰我给你推荐三个远古一 武器你就随便带一个 强化啥的太费钱 本来左轮也不怎么贵 你每隔5级换一次左轮 漫游靠的是高暴击高输出(你买不起高强化武器 所以这个可以无视)和高力量 你自己看在你游戏币买得起的那些范围你 那个力量最高就买那个 那些这个技能加几级那个技能加几级的都没用 刷图点好死亡左轮 银弹 左轮精通 物理暴击和物理背击就刷图去吧 回旋踢5够了 银弹也5够了 瞬踢满 别的都点无色技能你懂得 总之祝你游戏愉快。
 

做室内设计 景观设计 建筑漫游 动画 哪个更赚钱 前途更好

当然是动画啊,老兄,动画类技术一直是国内it业十大紧缺人才呀,室内和景观就不要考虑了,我就是干这个的,工资太低,提成少的可怜,建筑漫游还可以,要学的话可以在动画和漫游两者间选择,个人认为动画类技术升级空间大,有潜力,建议你学这个
 

相关内容