共计 1486 个字符,预计需要花费 4 分钟才能阅读完成。
摘要
上一解说咱们解说了 kafka 的具备的一些特点:相比于传统的音讯队列来说,kafka 能够做到分布式存储,具备高可用,高性能的特点,咱们这一讲次要解说:Kafka 实现高性能、高可用、分布式存储的的基本原理。主线次要从吞吐量到延时引出 kafka 是高吞吐量、低延时的架构;依据这个高吞吐量低延时原理从而引出 kafka 如果实现单机几十万并发数据写入、以及如何实现高性能数据读取;而后如何将写入的数据进行极致压缩利用磁盘效率,进而在数据写入读取,以及数据存取形式都晓得的状况下,kafka 如何实现分布式存储、分布式负载平衡;分布式数据存储曾经做完之后,怎么保障存储的数据实现高可用,而后如何保障存储进去的数据不会失落;这些都解说结束之后;最初解说下 kafka 架构外面的服务弹性伸缩以及节点新发现跟故障感知。从简到繁,一步一步层层递进。
思维导图
内容
1、吞吐量跟延时
1、吞吐量跟延时
因为 kafka 是高吞吐量跟低延时的架构,所以在解说 kafka 时候须要先理解吞吐量跟延时概念。
如果解决完一条数据须要 1 毫秒,并且一条数据的大小是 1kb; 那么 1 秒中就能够解决 1000 条数据,1000kb 数据大小;下面场景中吞吐量就是:1000 条、1000kb;
吞吐量 : 单位工夫内解决数据大小。
延时 :Kafka 一次申请 接管音讯到音讯解决实现所耗费的工夫。
2、Spark Streaming 要采取微批处理技术实现流式计算
与 kafka 相似的 Spark 大数据框架,为什么须要应用微批处理技术实现流式计算?
如果咱们解决完一条数据须要 1 毫秒,那么咱们的延时是:1ms 零碎的吞吐量是:1000 条数据。
咱们采纳微批处理机制,先花 9 毫秒收集完 1000 条数据,而后通过 1 毫秒进行数据流式计算,那么本次一起数据申请执行结束的延时 10 毫秒 吞吐量是 10 万条数据。吞吐量量进步了 100 倍,延时减少了 10 倍。
因为解决 1 条或者 1000 条数据耗时相等, 为了节俭每条数据都须要 启动新的计算资源: 网络开销或者磁盘开销
比方解决 1 条数据须要 1 毫秒,吞吐量是:1000 条数据 /s; 如果 9 毫秒收集 1000 条数据,而后 1 毫秒解决数据, 那么零碎吞吐量 10 万条;零碎吞吐量增大了 100 倍数,然而延时减少了 10 倍。
其实也相似于咱们对数据库进行多条数据插入时候,应用批量插入而不是一次插入一条;次要是节约新资源的网络开销。
3、与 Spark Streaming 高吞吐量高延时不一样,Kafka 如何实现高吞吐量低延时?
kafka 实现高吞吐量低延时次要是基于 kafka 的数据写入机制跟数据读取机制。在上面解说。
2、Kafka 如何实现单机几十万并发写入
后面解说了 Spark Streaming 技术是应用:batch 微批处理,实现高吞吐高提早。然而 kafka 相同,高吞吐低提早。
常见音讯队列 rabbitmq 如何写入数据?
常见的音讯队列数据数据是间接将数据写入到内存,而后将内存外面的数据再写入到磁盘,这样的花就会耗用机器更多的内存,如果是基于 JVM 机制的还须要调配更多的对内存空间保证数据写入高效。
kafka 数据写入
os cache+ 磁盘程序写:kafka 数据写入是间接写磁盘;写磁盘的时候 实先写入到 page cache;page cache 是基于 os cache。并且数据写入磁盘的时候是磁盘程序写的。逻辑架构图如下: