Kafka原理,kafka基本原理
目前市场上各种中间件层出不穷,我们在具体选择时难免会有所纠结。在此,我们将阐述一些粗浅的看法。其实每个中间件在设计上都有自己独特的功能或优化点,这应该是我们所关注的,做到物尽其用,功能最大化。同时也要了解各自的劣势,主要是避坑。各种中间件就像积木一样。我们能做的就是选择合适形状的积木,建造我们需要的房子。
不得不说,Kafka这个积木,不仅可以用于消息中间件的削峰解耦,还可以用于实时流处理,可以说是数据业务的两手抓。真可谓上有厅堂,下有厨房。所以卡夫卡系列的第一篇文章,想从它的应用场景入手,谈谈有哪些技术和原理支撑着它的技术特性。
卡夫卡的核心思想概括为:所有消息都存储在一个“有序日志”中,生产者将消息发布到末尾(可以理解为追加),消费者从某个逻辑位开始顺序读取。
[场景1]消息中间件
在选择消息中间件时,我们主要关心的是:性能、消息的可靠性和排序。
1.表演
关于Kafka的高性能,主要是因为它在实现中利用了操作系统的一些底层优化技术,虽然作为一个写业务代码的程序员,这些底层知识也是需要知道的。
【优化1】零复制
这是卡夫卡在消费端的优化。下面我们通过两张图片来比较一下传统方法和零拷贝方法的区别:
传统方式:
零拷贝模式:终极目标:如何让数据不通过用户空间?从图中可以看出,零拷贝省略了拷贝到用户缓冲区的步骤,直接通过文件描述符将数据从内核空间拷贝到网卡接口。
【优化2】顺序写入磁盘。
写消息时采用文件追加,写好的消息不允许修改,所以写磁盘的方式是顺序写。我们通常认为基于磁盘的读写性能差,是指基于磁盘的随机读写;其实基于磁盘的顺序读写,性能接近内存的随机读写。下面是一个性能对比图表:
[优化3]内存映射
总结:用户空间的一个内存区域映射到内核空间,这样内核空间或者用户空间对这个内存区域的任何修改都可以直接映射到另一个区域。优点:如果在内核态和用户态有大量的数据传输,效率非常高。为什么会提高效率?一般来说,传统的方法是read()系统调用,将数据复制两次。内存映射方式为mmap()系统调用,只进行一次数据副本[优化4]批量压缩。
* *生产者:* *批量发送消息集* *消费者:* *主动拉取数据,也使用批量拉取方式。2.可靠性
卡夫卡的复制机制是保证其可靠性的核心。
至于副本机制,我理解为Leader-Follower机制,即同一数据在多个服务器中有多个副本,分区的粒度是partition。显然,这种策略有以下必须解决的问题:
如何同步副本?ISR机制:领导者动态维护ISR(同步副本)列表。如果领导者失败了,如何选举新的领导者?要解决这个问题,就要引入Zookeeper,这是卡夫卡实现复制机制的前提。至于它的原理,听下回分解,本文将从卡夫卡的角度来分析。在这里,我们只需要知道一些关于代理、主题和分区的元信息存储在Zookeeper中。当领导者失败时,从ISR集合中选出新的领导者。设置数据可靠性的Request.required.acks:
分区机制和复制机制的知识点:
3.顺序
秩序保障主要依靠分区机制的偏移。
说到分区,首先要解释相关的概念以及它们之间的关系。个人总结如下:
* *服务器(代理):* *指独立的服务器。
* *主题):** *消息的逻辑分类,可以跨代理。
* *分区):** *消息的物理分类,基本存储单元。
这里有一张图片来说明
为什么分区机制可以保证消息的顺序?Kafka可以保证分区中的消息是有序的和不可变的。* *制作人:* *卡夫卡的信息是一个键值对。我们通过设置键值来指定将消息发送到特定主题的特定分区。通过设置key,可以将同类型的消息发送到同一个分区,这样可以保证消息的顺序。* *消费者:* *消费者需要通过保存补偿来记录他们在哪里花钱。在0.10版之前,偏移保存在zk和后来的__consumeroffsets主题中。[场景2]流处理
在0.10版本之后,Kafka在流处理框架API——Kafka Streams中内置了一个基于Kafka的流处理类库,利用了上述内容。到目前为止,Kafka已经发展成为一个包括消息系统、存储系统和流处理系统的中央流处理平台。
不同于现有的Spark Streaming平台,Spark Streaming或Flink是一个系统架构,而Kafka Streams属于一个库。Kafka Streams秉承简单的设计原则,优势在于运维。同时,卡夫卡流保留了上述所有特征。
至于两者的适用应用场景,有大佬已经给出了结论,就不强求总结了。
Kafka Streams:适合“Kafka -卡夫卡”场景火花流:适合“Kafka-数据库”或“Kafka-数据科学模型”场景参考。
055-79000 《Kafka权威指南》大数据病理学阿帕奇卡夫卡:大数据实时处理时代,版权归作者所有:原创作品来自博主小二上九8,转载授权请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。