1、建立水运保通保畅工作专班;
2、全力保障港口全天候作业;
3、做好船舶运力保障;
4、扩大和加速港口基本建设。这几天在学习kafka,看了一些书和博文,看到了一篇博文感受颇深(深感大学的课程其实是非常重要的),所以这里就把这篇文章精简一下,顺便当给自己巩固一下知识。
众所周知kafka的吞吐量比一般的消息队列要高,号称the fastest,那他是如何做到的,让我们从以下几个方面分析一下原因。
生产者负责写入数据,Kafka会将消息持久化到磁盘,保证不会丢失数据,Kafka采用了俩个技术提高写入的速度。
1顺序写入:在大学的计算机组成(划重点)里我们学过,硬盘是机械结构,需要指针寻址找到存储数据的位置,所以,如果是随机IO,磁盘会进行频繁的寻址,导致写入速度下降。Kafka使用了顺序IO提高了磁盘的写入速度,Kafka会将数据顺序插入到文件末尾,消费者端通过控制偏移量来读取消息,这样做会导致数据无法删除,时间一长,磁盘空间会满,kafka提供了2种策略来删除数据:基于时间删除和基于partition文件的大小删除。
2Memory Mapped Files:这个和Java NIO中的内存映射基本相同,在大学的计算机原理里我们学过(划重点),mmf直接利用 *** 作系统的Page来实现文件到物理内存的映射,完成之后对物理内存的 *** 作会直接同步到硬盘。mmf通过内存映射的方式大大提高了IO速率,省去了用户空间到内核空间的复制。它的缺点显而易见--不可靠,当发生宕机而数据未同步到硬盘时,数据会丢失,Kafka提供了producetype参数来控制是否主动的进行刷新,如果kafka写入到mmp后立即flush再返回给生产者则为同步模式,反之为异步模式。
在这之前先来了解一下零拷贝:平时从服务器读取静态文件时,服务器先将文件从复制到内核空间,再复制到用户空间,最后再复制到内核空间并通过网卡发送出去,而零拷贝则是直接从内核到内核再到网卡,省去了用户空间的复制。
Kafka把所有的消息存放到一个文件中,当消费者需要数据的时候直接将文件发送给消费者,比如10W的消息共10M,全部发送给消费者,10M的消息在内网中传输是非常快的,假如需要1s,那么kafka的tps就是10w。Zero copy对应的是Linux中sendfile函数,这个函数会接受一个offsize来确定从哪里开始读取。现实中,不可能将整个文件全部发给消费者,他通过消费者传递过来的偏移量来使用零拷贝读取指定内容的数据返回给消费者。
Kafka快的原因是他将一个个消息变成一个文件,通过mmp提高IO速度,写入时在末尾直接添加,读取时通过偏移量直接返回。
不能因为快我们的消息队列就只选择Kafka,技术的选型还是要结合具体的业务场景,合适的才是最好的,不能只以快论英雄,这一点相信男同胞们深有体会。具体不同MQ的使用场景可以看我之前的文章,《Kafka还是RabbitMQ?》。接口有问题,对这个接口进行压力测试时,系统的吞吐量一直上不去,并且 应用服务器 (部署接口项目的服务器) 的CPU、内存等资源的使用率也一直很低,导致一直无法测试出这个接口的压力峰值。
数据库配置
高并发情况下,如果请求数据需要写入数据库,且需要写入多个表的时候,如果数据库的最大连接数不够,或者写入数据的SQL没有索引没有绑定变量,抑或没有主从分离、读写分离等,
就会导致数据库事务处理过慢,影响到TPS。吞吐量受网络的带宽或网络的额定速率的限制。
交换机:把两个服务器传输的捆成一捆 吞吐量:把所有链路的速率加和。
交换机可以同时互不影响的传送这些信息包,并防止传输冲突,提高了网络的实际吞吐量。总结区别: 交换机是发展在网桥之上的,功能可以覆盖掉。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)