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

做网站那家比较好如何搜索关键词

做网站那家比较好,如何搜索关键词,网站开发小组,都江堰网站建设培训学校1.概述 无论 kafka 作为 MQ 也好#xff0c;作为存储层也罢#xff0c;无非就是两个功能#xff1a;一是 Producer 生产的数据存到 broker#xff0c;二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了#xff0c;本文也是从这两个方面去剖析Kafk…1.概述 无论 kafka 作为 MQ 也好作为存储层也罢无非就是两个功能一是 Producer 生产的数据存到 broker二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了本文也是从这两个方面去剖析Kafka为什么能那么快。 2.利用 Partition 实现并行处理 Kakfa是一个发布-订阅的消息队列无论是发布还是订阅必须要指定Topic。Topic是一个逻辑上的概念而每个Partition是物理上的概念。每个Topic包含一个或者多个Partitiion不同的Partition可位于不同的节点上。 由于不同的Partition可以位于不同的机器上可以发挥集群的优势实现机器间的并行处理。由于Partition在物理上对应一个文件夹即使多个Partition位于同一个节点可以通过配置可以让同一个节点上的不同 Partition 置于不同的磁盘上从而实现磁盘间的并行处理充分发挥多磁盘的优势。 3.顺序写磁盘 影响磁盘的关键因素是磁盘服务时间即磁盘完成一个I/O请求所花费的时间它由寻道时间、旋转延迟和数据传输时间三部分构成。 机械硬盘的连续读写性能很好但随机读写性能很差这主要是因为磁头移动到正确的磁道上需要时间随机读写时磁头需要不停的移动时间都浪费在了磁头寻址上所以性能不高。衡量磁盘的重要主要指标是IOPS(Input/Output Operations Per Second )和吞吐量。 在Kafka中都是通过追加写的方式来尽可能的将随机 I/O 转换为顺序 I/O以此来降低寻址时间和旋转延时从而最大限度的提高 IOPS。 官网有数据表明同样的磁盘顺序写能到600M/s而随机写只有100K/s。这与磁盘的机械机构有关顺序写之所以快是因为其省去了大量磁头寻址的时间。 Kafka 中每个分区是一个有序的不可变的消息序列新的消息不断追加到 partition 的末尾这个就是顺序写。 由于磁盘有限不可能保存所有数据实际上 Kafka 也没必要保存所有数据需要删除旧的数据。由于顺序写入的原因所以 Kafka 采用各种删除策略删除数据时并非通过使用“读 - 写”模式去修改文件而是将 Partition 分为多个 Segment每个 Segment 对应一个物理文件通过删除整个文件的方式去删除 Partition 内的数据。这种方式清除旧数据的方式也避免了对文件的随机写操作。 4.充分利用 Page Cache 引入 Cache 层的目的是为了提高 Linux 操作系统对磁盘访问的性能。Cache 层在内存中缓存了磁盘上的部分数据。当数据的请求到达时如果在 Cache 中存在该数据且是最新的则直接将数据传递给用户程序免除了对底层磁盘的操作提高了性能。Cache 层也正是磁盘 IOPS 为什么能突破 200 的主要原因之一。 在 Linux 的实现中文件 Cache 分为两个层面一是 Page Cache另一个 Buffer Cache每一个 Page Cache 包含若干 Buffer Cache。Page Cache 主要用来作为文件系统上的文件数据的缓存来用尤其是针对当进程对文件有 read/write 操作的时候。Buffer Cache 则主要是设计用来在系统对块设备进行读写的时候对块进行数据缓存的系统来使用。 使用 Page Cache 的好处 I/O Scheduler 会将连续的小块写组装成大块的物理写从而提高性能。I/O Scheduler 会尝试将一些写操作重新按顺序排好从而减少磁盘头的移动时间。充分利用所有空闲内存(非 JVM 内存)。如果使用应用层 Cache(即 JVM 堆内存)会增加 GC 负担。读操作可直接在 Page Cache 内进行。如果消费和生产速度相当甚至不需要通过物理磁盘(直接通过 Page Cache)交换数据。如果进程重启JVM 内的 Cache 会失效但 Page Cache 仍然可用。 Broker 收到数据后写磁盘时只是将数据写入 Page Cache并不保证数据一定完全写入磁盘。从这一点看可能会造成机器宕机时Page Cache 内的数据未写入磁盘从而造成数据丢失。但是这种丢失只发生在机器断电等造成操作系统不工作的场景而这种场景完全可以由 Kafka 层面的 Replication 机制去解决。 如果为了保证这种情况下数据不丢失而强制将 Page Cache 中的数据 Flush 到磁盘反而会降低性能。也正因如此Kafka 虽然提供了 flush.messages 和 flush.ms 两个参数将 Page Cache 中的数据强制 Flush 到磁盘但是 Kafka 并不建议使用。 5.零拷贝技术 Kafka 中存在大量的网络数据持久化到磁盘(Producer 到 Broker)和磁盘文件通过网络发送(Broker 到 Consumer)的过程。这一过程的性能直接影响 Kafka 的整体吞吐量。 操作系统的核心是内核独立于普通的应用程序可以访问受保护的内存空间也有访问底层硬件设备的权限。 为了避免用户进程直接操作内核保证内核安全操作系统将虚拟内存划分为两部分一部分是内核空间Kernel-space一部分是用户空间User-space。 传统的 Linux 系统中标准的 I/O 接口(例如readwrite)都是基于数据拷贝操作的即 I/O 操作会导致数据在内核地址空间的缓冲区和用户地址空间的缓冲区之间进行拷贝所以标准 I/O 也被称作缓存 I/O。这样做的好处是如果所请求的数据已存放在内核的高速缓冲存储器中那么就可以减少实际的 I/O 操作但坏处就是数据拷贝的过程会导致 CPU 开销。 把 Kafka 的生产和消费简化成如下两个过程来看 网络数据持久化到磁盘 (Producer 到 Broker)磁盘文件通过网络发送(Broker 到 Consumer) 5.1 网络数据持久化到磁盘 (Producer 到 Broker) 传统模式下数据从网络传输到文件需要 4 次数据拷贝、4 次上下文切换和两次系统调用。 data socket.read()// 读取网络数据 File file new File() file.write(data)// 持久化到磁盘 file.flush()这一过程实际上发生了四次数据拷贝 首先通过 DMA copy 将网络数据拷贝到内核态 Socket Buffer然后应用程序将内核态 Buffer 数据读入用户态CPU copy接着用户程序将用户态 Buffer 再拷贝到内核态CPU copy最后通过 DMA copy 将数据拷贝到磁盘文件 DMADirect Memory Access直接存储器访问。DMA 是一种无需 CPU 的参与让外设和系统内存之间进行双向数据传输的硬件机制。使用 DMA 可以使系统 CPU 从实际的 I/O 数据传输过程中摆脱出来从而大大提高系统的吞吐率。 同时还伴随着四次上下文切换如下图所示 数据落盘通常都是非实时kafka 生产者数据持久化也是如此。Kafka 的数据并不是实时的写入硬盘它充分利用了现代操作系统分页存储来利用内存提高 I/O 效率。 对于 kafka 来说Producer 生产的数据存到 broker这个过程读取到 socket buffer 的网络数据其实可以直接在内核空间完成落盘。并没有必要将 socket buffer 的网络数据读取到应用进程缓冲区在这里应用进程缓冲区其实就是 brokerbroker 收到生产者的数据就是为了持久化。 在此特殊场景下接收来自 socket buffer 的网络数据应用进程不需要中间处理、直接进行持久化时。可以使用 mmap 内存文件映射。 Memory Mapped Files简称 mmap也称 MMFile使用 mmap 的目的是将内核中读缓冲区(read buffer)的地址与用户空间的缓冲区(user buffer)进行映射。从而实现内核缓冲区与应用程序内存的共享省去了将数据从内核读缓冲区(read buffer)拷贝到用户缓冲区(user buffer)的过程。工作原理是直接利用操作系统的 Page 来实现文件到物理内存的直接映射。完成映射之后对物理内存的操作会被同步到硬盘上。 使用这种方式可以获取很大的 I/O 提升省去了用户空间到内核空间复制的开销。 mmap 也有一个很明显的缺陷——不可靠写到 mmap 中的数据并没有被真正的写到硬盘操作系统会在程序主动调用 flush 的时候才把数据真正的写到硬盘。Kafka 提供了一个参数——producer.type 来控制是不是主动flush如果 Kafka 写入到 mmap 之后就立即 flush 然后再返回 Producer 叫同步(sync)写入 mmap 之后立即返回 Producer 不调用 flush 就叫异步(async)默认是 sync。 零拷贝Zero-copy技术指在计算机执行操作时CPU 不需要先将数据从一个内存区域复制到另一个内存区域从而减少上下文切换以及 CPU 的拷贝时间。 它的作用是在数据从网络设备到用户程序空间传递的过程中减少数据拷贝次数减少系统调用实现 CPU 的零参与彻底消除 CPU 在这方面的负载。 目前零拷贝技术主要有三种类型 直接I/O数据直接跨过内核在用户地址空间与I/O设备之间传递内核只是进行必要的虚拟存储配置等辅助工作避免内核和用户空间之间的数据拷贝当应用程序不需要对数据进行访问时则可以避免将数据从内核空间拷贝到用户空间 mmap, sendfile, splice tee, sockmap。copy on write写时拷贝技术数据不需要提前拷贝而是当需要修改时再进行部分拷贝。 5.2 磁盘文件通过网络发送(Broker 到 Consumer) 传统方式实现先读取磁盘、再用 socket 发送实际也进过四次 copy。 buffer File.read Socket.send(buffer)这一过程可以类比上边的生产消息 首先通过系统调用将文件数据读入到内核态 BufferDMA 拷贝然后应用程序将内存态 Buffer 数据读入到用户态 BufferCPU 拷贝接着用户程序通过 Socket 发送数据时将用户态 Buffer 数据拷贝到内核态 BufferCPU 拷贝最后通过 DMA 拷贝将数据拷贝到 NIC Buffer Linux 2.4 内核通过 sendfile 系统调用提供了零拷贝。数据通过 DMA 拷贝到内核态 Buffer 后直接通过 DMA 拷贝到 NIC Buffer无需 CPU 拷贝。这也是零拷贝这一说法的来源。除了减少数据拷贝外因为整个读文件 - 网络发送由一个 sendfile 调用完成整个过程只有两次上下文切换因此大大提高了性能。 Kafka 在这里采用的方案是通过 NIO 的 transferTo/transferFrom 调用操作系统的 sendfile 实现零拷贝。总共发生 2 次内核数据拷贝、2 次上下文切换和一次系统调用消除了 CPU 数据拷贝 。 6.总结 kafka高效读写的原因: 利用partition 并行处理 顺序写磁盘充分利用磁盘特性 利用了现代操作系统分页存储 Page Cache 来利用内存提高 I/O 效率 采用了零拷贝技术 Producer 生产的数据持久化到 broker采用 mmap 文件映射实现顺序的快速写入 Customer 从 broker 读取数据采用 sendfile将磁盘文件读到 OS 内核缓冲区后转到 NIO buffer进行网络发送减少 CPU 消耗
http://www.zqtcl.cn/news/543917/

相关文章:

  • 成都响应式网站建报告问题
  • 做设计找素材的+网站有哪些建立平台什么意思
  • 网站设置在哪里找宁德网站建设制作
  • logo网站设计素材品牌高端网站建设公司
  • 芙蓉区乡建设局网站郑州网站建设qicaizz
  • 网站建设的缺陷个人网站制作图片
  • 四川省建设厅注册管理中心网站设计上海2021门票
  • 帝国cms做微网站人力资源公司怎么开
  • 网站建设学徒松江品划做网站公司
  • 灯饰网站需要这么做深圳专业网站设计公司
  • 政务网站设计wordpress 嵌入html5
  • 移动网站 pc网站的区别吗网站建设工厂
  • 有意义网站织梦圈子如何调用网站默认模板
  • 南京公司网站模板建站网页制作中的网站维护
  • 微信分享 淘宝网站 怎么做wordpress访问慢
  • 网站后台制作沈阳营销型网站制作技术
  • 微页制作平台网站建设wordpress文章显示数量
  • 望野古诗王绩seo优化系统
  • 网站设计大概流程惠城区龙丰街道
  • 游戏平台十大排名南宁seo优化公司
  • 佛山外贸网站建设方案企业管理控制系统
  • 分类信息网站如何做排名品牌建设卓有成效
  • 企业网站报价方案模板下载营销软件crm
  • 湛江网站开发哪家专业东莞营销型手机网站建设
  • 做个外贸的网站不懂英语咋做做网站 嵌入支付
  • 官方模板关键字生成的代码添加在网站的什么地方?网站 建设 培训 视频
  • 做网站时图片要切片有什么作用网站导航栏模板怎么做
  • 网站做数据分析网站开发为什么不用cgi了
  • 有了网址可以建网站吗软件外包项目网站
  • 威海设计网站的单肩包自定义页面设计模板