当前位置: 首页 > news >正文

深圳市门户网站建设seo站内优化和站外优化

深圳市门户网站建设,seo站内优化和站外优化,汕头门户网站建设,凡科建设网站戳蓝字“CSDN云计算”关注我们哦#xff01;作者 | 邴越来源 | 技术琐话Kafka的消息是保存或缓存在磁盘上的#xff0c;一般认为在磁盘上读写数据是会降低性能的#xff0c;因为寻址会比较消耗时间#xff0c;但是实际上#xff0c;Kafka的特性之一就是高吞吐率。即使是普… 戳蓝字“CSDN云计算”关注我们哦作者 | 邴越来源 | 技术琐话Kafka的消息是保存或缓存在磁盘上的一般认为在磁盘上读写数据是会降低性能的因为寻址会比较消耗时间但是实际上Kafka的特性之一就是高吞吐率。即使是普通的服务器Kafka也可以轻松支持每秒百万级的写入请求超过了大部分的消息中间件这种特性也使得Kafka在日志处理等海量数据场景广泛应用。针对Kafka的基准测试可以参考Apache Kafka基准测试每秒写入2百万在三台廉价机器上下面从数据写入和读取两方面分析为什么Kafka速度这么快。一、写入数据Kafka会把收到的消息都写入到硬盘中它绝对不会丢失数据。为了优化写入速度Kafka采用了两个技术 顺序写入和MMFile 。1、顺序写入磁盘读写的快慢取决于你怎么使用它也就是顺序读写或者随机读写。在顺序读写的情况下磁盘的顺序读写速度和内存持平。因为硬盘是机械结构每次读写都会寻址-写入其中寻址是一个“机械动作”它是最耗时的。所以硬盘最讨厌随机I/O最喜欢顺序I/O。为了提高读写硬盘的速度Kafka就是使用顺序I/O。而且Linux对于磁盘的读写优化也比较多包括read-ahead和write-behind磁盘缓存等。如果在内存做这些操作的时候一个是JAVA对象的内存开销很大另一个是随着堆内存数据的增多JAVA的GC时间会变得很长使用磁盘操作有以下几个好处磁盘顺序读写速度超过内存随机读写JVM的GC效率低内存占用大。使用磁盘可以避免这一问题系统冷启动后磁盘缓存依然可用下图就展示了Kafka是如何写入数据的 每一个Partition其实都是一个文件 收到消息后Kafka会把数据插入到文件末尾虚框部分这种方法有一个缺陷——没有办法删除数据 所以Kafka是不会删除数据的它会把所有的数据都保留下来每个消费者Consumer对每个Topic都有一个offset用来表示读取到了第几条数据 。两个消费者Consumer1有两个offset分别对应Partition0、Partition1假设每一个Topic一个PartitionConsumer2有一个offset对应Partition2。这个offset是由客户端SDK负责保存的Kafka的Broker完全无视这个东西的存在一般情况下SDK会把它保存到Zookeeper里面所以需要给Consumer提供zookeeper的地址。如果不删除硬盘肯定会被撑满所以Kakfa提供了两种策略来删除数据一是基于时间二是基于partition文件大小。具体配置可以参看它的配置文档。2、Memory Mapped Files即便是顺序写入硬盘硬盘的访问速度还是不可能追上内存。所以Kafka的数据并不是实时的写入硬盘 它充分利用了现代操作系统分页存储来利用内存提高I/O效率。Memory Mapped Files(后面简称mmap)也被翻译成 内存映射文件 在64位操作系统中一般可以表示20G的数据文件它的工作原理是直接利用操作系统的Page来实现文件到物理内存的直接映射。完成映射之后你对物理内存的操作会被同步到硬盘上操作系统在适当的时候。通过mmap进程像读写硬盘一样读写内存当然是虚拟机内存也不必关心内存的大小有虚拟内存为我们兜底。使用这种方式可以获取很大的I/O提升省去了用户空间到内核空间复制的开销调用文件的read会把数据先放到内核空间的内存中然后再复制到用户空间的内存中。但也有一个很明显的缺陷——不可靠写到mmap中的数据并没有被真正的写到硬盘操作系统会在程序主动调用flush的时候才把数据真正的写到硬盘。Kafka提供了一个参数——producer.type来控制是不是主动flush如果Kafka写入到mmap之后就立即flush然后再返回Producer叫 同步 (sync)写入mmap之后立即返回Producer不调用flush叫异步 (async)。二、读取数据Kafka在读取磁盘时做了哪些优化2、基于sendfile实现Zero Copy传统模式下当需要对一个文件进行传输的时候其具体流程细节如下调用read函数文件数据被copy到内核缓冲区read函数返回文件数据从内核缓冲区copy到用户缓冲区write函数调用将文件数据从用户缓冲区copy到内核与socket相关的缓冲区。数据从socket缓冲区copy到相关协议引擎。以上细节是传统read/write方式进行网络文件传输的方式我们可以看到在这个过程当中文件数据实际上是经过了四次copy操作硬盘—内核buf—用户buf—socket相关缓冲区—协议引擎而sendfile系统调用则提供了一种减少以上多次copy提升文件传输性能的方法。在内核版本2.1中引入了sendfile系统调用以简化网络上和两个本地文件之间的数据传输。sendfile的引入不仅减少了数据复制还减少了上下文切换。sendfile(socket, file, len);运行流程如下sendfile系统调用文件数据被copy至内核缓冲区再从内核缓冲区copy至内核中socket相关的缓冲区最后再socket相关的缓冲区copy到协议引擎相较传统read/write方式2.1版本内核引进的sendfile已经减少了内核缓冲区到user缓冲区再由user缓冲区到socket相关缓冲区的文件copy而在内核版本2.4之后文件描述符结果被改变sendfile实现了更简单的方式再次减少了一次copy操作。在Apache、Nginx、lighttpd等web服务器当中都有一项sendfile相关的配置使用sendfile可以大幅提升文件传输性能。Kafka把所有的消息都存放在一个一个的文件中当消费者需要数据的时候Kafka直接把文件发送给消费者配合mmap作为文件读写方式直接把它传给sendfile。2、批量压缩在很多情况下系统的瓶颈不是CPU或磁盘而是网络IO对于需要在广域网上的数据中心之间发送消息的数据流水线尤其如此。进行数据压缩会消耗少量的CPU资源,不过对于kafka而言,网络IO更应该需要考虑。如果每个消息都压缩但是压缩率相对很低所以Kafka使用了批量压缩即将多个消息一起压缩而不是单个消息压缩Kafka允许使用递归的消息集合批量的消息可以通过压缩的形式传输并且在日志中也可以保持压缩格式直到被消费者解压缩Kafka支持多种压缩协议包括Gzip和Snappy压缩协议三、总结Kafka速度的秘诀在于它把所有的消息都变成一个批量的文件并且进行合理的批量压缩减少网络IO损耗通过mmap提高I/O速度写入数据的时候由于单个Partion是末尾添加所以速度最优读取数据的时候配合sendfile直接暴力输出。福利扫描添加小编微信备注“姓名公司职位”加入【云计算学习交流群】和志同道合的朋友们共同打卡学习推荐阅读苹果宣布加入CNCF华为要求美国运营商支付专利费微软删除最大的公开人脸识别数据集如何给老婆解释什么是微服务阿里巴巴杨群高并发场景下Python的性能挑战那些去德国的程序员后来怎么样了新技术“红”不过十年半监督学习为什么是个例外独家对话V神! 质疑之下的以太坊路在何方?真香朕在看了
http://www.pierceye.com/news/747440/

相关文章:

  • 网站建设及维护流程深圳市手机网站建设品牌
  • 凡科做的网站被举报了会怎么样网络招商平台网站怎么做
  • 山东网站建设公司哪家权威嘉兴中小企业网站制作
  • 做网站的搜索引擎从代码角度分析网站怎么做
  • jsp小型网站开发南宁百度seo排名优化
  • 上海最专业的网站建设公司排名为什么上传网站模板网站上没有文字和图片
  • 网站建设灬金手指下拉十四自己做的网站与ie不兼容
  • 专业制作网站价格wordpress 安装语言包
  • 企业网站建设运营的灵魂是什么网站建设服务协议 百度
  • 注册了域名之后怎么做网站苏州市住房建设局网站
  • 免费做问卷的网站好新媒体培训
  • 网站建设 版权归属重庆建设监理协会网站
  • 游戏网站域名相城区网站建设
  • 很看好未来做生鲜的网站邢台做外贸网站
  • 网站首页点击中文英文链接 翻译成对应的语言 怎么做100种创意活动策划
  • 网站标题怎么设置小程序定制程序
  • discuz 网站搬家网站建设的工具
  • 有做国际网站生意吗做网站义乌
  • 网站开发技术可行性分析怎么写孝感建设公司网站
  • 灯塔网站建设有网站源码怎么做网站
  • 网站设计方案策划德国的网站后缀
  • 可以自己做网站卖东西wordpress标签静态
  • 典当行 网站威海网站推广
  • 佛山市住房建设局网站网站开发业务ppt
  • 页面结构和页面设计优化措施二十条
  • 做网站程序怎么写wordpress漂浮表单
  • 企业网站要怎么建设网站建设 工具
  • wordpress 邮箱激活宁波营销型网站建设优化建站
  • 婚纱网站页面设计广州网站建设推广公司有哪些
  • 网站制作报价大约建设模式有哪些