Kafka(2)-kafka架构-基本原理

摘要

上一讲解我们讲解了kafka的具备的一些特点:相比于传统的消息队列来说,kafka可以做到分布式存储,具备高可用,高性能的特点,我们这一讲主要讲解:Kafka实现高性能、高可用、分布式存储的的基本原理。主线主要从吞吐量到延时引出kafka是高吞吐量、低延时的架构;根据这个高吞吐量低延时原理从而引出kafka如果实现单机几十万并发数据写入、以及如何实现高性能数据读取;然后如何将写入的数据进行极致压缩利用磁盘效率,进而在数据写入读取,以及数据存取方式都知道的情况下,kafka如何实现分布式存储、分布式负载均衡;分布式数据存储已经做完之后,怎样保证存储的数据实现高可用,然后如何保证存储进去的数据不会丢失;这些都讲解完毕之后;最后讲解下kafka架构里面的服务弹性伸缩以及节点新发现跟故障感知。从简到繁,一步一步层层递进。

思维导图

image.png

内容

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的数据写入机制跟数据读取机制。在下面讲解。

image.png

2、Kafka如何实现单机几十万并发写入

前面讲解了Spark Streaming技术是使用:batch微批处理,实现高吞吐高延迟。但是kafka相反,高吞吐低延迟。

常见消息队列rabbitmq如何写入数据?
常见的消息队列数据数据是直接将数据写入到内存,然后将内存里面的数据再写入到磁盘,这样的花就会耗用机器更多的内存,如果是基于JVM机制的还需要分配更多的对内存空间保证数据写入高效。

image.png

kafka数据写入
os cache+磁盘顺序写:kafka数据写入是直接写磁盘;写磁盘的时候 实先写入到page cache;page cache是基于os cache。并且数据写入磁盘的时候是磁盘顺序写的。逻辑架构图如下:

image.png

3、kafka如何实现高效数据读取

4、底层数据存储结构

5、如何保证TB数据分布式存储

6、如何保证kafka的高可用

7、如何保证kafka写入数据不丢失

8、集群数据写入时候如何实现负载均衡效果

9、kafka无状态的架构如何实现

10、kafka如何实现节点发现跟故障感知

你可能感兴趣的:(kafka)