对kafka的简单理解

81 阅读5分钟

前言

其实中间件的原理都差不多,都是商业化的产品,带着产品的思维才会理解更加深刻! 对于中间件产品而言,其基本原理大同小异,究其原因是这类产品的作用其实就是数据中转站,围绕这个思路展开,再试图理解kafka会有更大帮助。 从架构而言,有生产者、消费者、broker。

image.png

从图上可以看到一些信息:生产者数量和消费者数量不一致、消息的流转是单向的、broker是集群化的。

一些基本概念

topic:可以理解为一组消息的集合,逻辑概念; Partition:是一个队列,存储实际的消息,物理概念。这里最容易误解的是一位topic包含Partition。

作为信息流转的一个系统,理解kafka可以从以下几个维度:

理解

可靠性(保障消息\数据不丢)

对于一个商业化的的产品,可靠是非常重要的,可靠性体现了一个产品的稳定,可以保障使用方比较正常使用,从而能让产品走的更远。 对于分布式系统,要有舍有得,针对ACP,kafka选择了AP。

ACK

生产者生产消息到broker,其实这里可以理解为是两者之间的通信,确保消息是否发送到broker,kafka采用了ack属性值供使用者配置。

集群化

集群化主要是用来针对单点问题的,单机挂掉了服务就会处于不可用状态,如果提供一种集群并且具备崩溃选举的机制,那么可以很好的解决单点问题。这里的集群,有两层概念:一个是broker的集群、一个是 partition的集群(这是kafka提供的,也是我们主要讨论的)。

leader选举

集群化延申出来的两个概念是topic分区副本和leader选举。副本(follower)是相对于leader副本而言的,读写操作是直接和leader副本交互的,folloer副本主要是用来同步(备份)数据,用于leader崩溃时候启用的。

ISR列表

所以leader的选举机制也是比较关键的,为了保证选举出来的leader的数据是完备的、最全、最新的,kafka采取了 in-sync replicas(ISR)的概念。ISR是有各个分区的leader进行独立维护的,是一个列表,即ISR列表,列表维护的是各个broker编号,通过配置replica.lag.time.max.ms,来表明什么样的follwer才能进入到ISR列表,比如给设置的是10s,那么该时间段内的都可以认为是和leader同步的(即便这里有时间差)。因为这里有这个时间差的概念,所以ISR呢是一个动态的列表。

围绕上面的几个细化的维度思考,那么就可以更深入的理解消息不丢失这个原理了。

性能快

这里可以对比redis,kafka的存储是基于磁盘的,那他性能怎么做到的快呢?kafka为了做到这一点,从以下方面做了诸多:顺序写、页缓存、零拷贝(好多中间件都用这个来进行优化自身)、流数据等。

顺序写 可以让磁盘的性能接近内存,因为节省了寻址的时间,往磁盘读写的时候都会有寻址这个动作,而且现在大多磁盘都是机械硬盘。顺序写不仅速度快,而且会大大提高吞吐量。

页缓存 磁盘的速度和内存的速度还是有很大的差异,这个角度看kafka的数据落盘不是严格的实时。所以,操作的数据可以理解为是操作的缓存,调用flush的时候会进行刷盘操作。如果生产者发送消息给kafka,k写入到页缓存然后立马调用flush,然后再给producer返回信息,这是同步的方式(sync);如果顺序相反,则为异步(async)。这里用到的nmap技术,用来映射内存和磁盘。 注意,这里的刷盘是操作系统执行的。

零拷贝 虽然采用了页缓存来最大限度的提高速度,但页缓冲区之间存在字节拷贝。尤其是针对kafk这种中间件,数据消息需要在三者这件轮转,那么面临的copy操作会比较多。ka采用了共享的二进制消息格式,三者可以共享这些格式的信息。(这里会用新文章进行讲解)

kafka其实是用来中转数据的,那么很多问题是紧扣数据产生的,明白了问题的来源,可以更好的去解决问题。

批处理:对于kafka说,他的瓶颈其实不在于磁盘,而是网络!一条条发送信息,和批量发送相比,批量更具备优势!中间件是供多方使用的,所以呢,一定会提供日志的,这是任何一个商业化软件必须具备的功能。ka在在这里做的处理是将日志批量进行处理。

消息压缩:如果经常做接口开发可能对这个理解更为深入,数据越小(体积),消耗的带宽会越小,那么性能会最佳。 思考:这里的压缩,是放在哪一侧了?

流处理 ka在设计的时候会把topi分区的消息尽可能均匀的分配到每个consumer,这样可以实现并发(更好的),提高吞吐量。

参考

1、kafka消费者Consumer参数设置及参数调优建议-kafka 商业环境实战

2、Understanding Kafka Topic Partitions

3、kafka入门