卡夫卡核心思想概括和底层原理

介绍

本篇内容主要讲解“卡夫卡核心思想概括和底层原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“卡夫卡核心思想概括和底层原理”吧!

卡夫卡核心思想概括

所有的消息以“有序日志”的方式存储,生产者将消息发布到末端(可理解为追加),消费者从某个逻辑位按序读取。

【场景一】消息中间件

在选择消息中间件时,我们的主要关注点有:性能,消息的可靠性,顺序性。

1。性能

关于卡夫卡的高性能,主要是因为它在实现上利用了操作系统一些底层的优化技术,尽管作为写业务代码的程序员,这些底层知识也是需要了解的。

卡夫卡核心思想概括和底层原理

【优化一】零拷贝

这是卡夫卡在消费者端的优化,我们通过两张图来比较一下传统方式与零拷贝方式的区别:

传统方式:

卡夫卡核心思想概括和底层原理

<李>

零拷贝方式:

<李>

终极目标:如何让数据不经过用户空间?

<李>

从图中可看的出,零拷贝省略了拷贝到用户缓冲的步骤,通过文件描述符,直接从内核空间将数据复制到网卡接口。

卡夫卡核心思想概括和底层原理

【优化二】顺序写入磁盘

写入消息时,采用文件追加的方式,并且不允许修改已经写入的消息,于是写入磁盘的方式是顺序写入。我们通常认为的基于磁盘读写性能较差,指的是基于磁盘的随机读写;事实上,基于磁盘的顺序读写,性能接近于内存的随机读写,以下是性能对比图:

卡夫卡核心思想概括和底层原理

【优化三】内存映射

<李>

概括:用户空间的一段内存区域映射到内核空间,这样,无论是内核空间或用户空间对这段内存区域的修改,都可以直接映射到另一个区域。

<李>

优势:如果内核态和用户态存在大量的数据传输,效率是非常高的。

<李>

为什么会提高效率:概括来讲,传统方式为阅读()系统调用,进行了两次数据拷贝;内存映射方式为mmap()系统调用,只进行一次数据拷贝

【优化四】批量压缩

<李>

生产者:批量发送消息集消费者:主动拉取数据,同样采用批量拉取的方式

2。可靠性

卡夫卡的副本机制是保证其可靠性的核心。

关于副本机制,我将它理解为被领导机制,就是多个服务器中有相同数据的多个副本,并且划分的粒度是分区。很明显,这样的策略就有下面几个问题必须解决:

<李>

各副本间如何同步?

<李>

ISR机制:领袖动态维护一个ISR(同步副本)列表,

<李>

领袖故障,如何选举新的领袖?

<李>

要想解决这个问题,就要引出动物园管理员,它是卡夫卡实现副本机制的前提,关于它的原理且听下回分解,本篇还是从卡夫卡角度进行分析。在这里我们只需要了解,一些关于经纪人,话题,分区的元信息存储在动物园管理员中,领导人发生故障时,从ISR集合中进行选举新的领袖。

request.required。ack来设置数据的可靠性:

卡夫卡核心思想概括和底层原理

分区机制和副本机制知识点:

卡夫卡核心思想概括和底层原理

3。顺序性

顺序性保证主要依赖于分区机制+偏移量。

提到分区,首先就要解释一下相关的概念以及他们之间的关系,个人总结如下几点:

服务器(经纪人):指一个独立的服务器

主题(主题):消息的逻辑分类,可跨代理

分区(分区):消息的物理分类,基本的存储单元

这里盗一张图阐述上述概念间的关系

卡夫卡核心思想概括和底层原理

<李>

为什么分区机制可以保证消息的顺序性?

<李>

卡夫卡核心思想概括和底层原理