Kafka基础知识点梳理
1、什么是Kafka?
官方定义:Apache Kafka is an open-source distributed event streaming platform(Kafka是一个开源的分布式流计算平台)
自定义:Kafka是一个分布式、分区的、多副本的、多生产者、多订阅者、基于zookeeper协调的分布式日志系统和消息系统。
2、运用场景
主要是日志搜集系统和消息系统
3、消息系统
消息传递模式:点对点模式 和 发布-订阅模式
即:生产者发送一条消息到queue,只有一个消费者能收到。
当发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到N个订阅者都能得到同一个消息的拷贝。
Kafka:
消费端为拉模型,消费状态和订阅关系由客户端端负责维护,消息消费 完后不会立即删除,会保留历史消息。因此支持多订阅时,消息只会存储一 份就可以了。
4、Kafka-扮演角色
4.1 消息系统
Kafka和传统的消息系统(消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能;另外,Kafka还实现了消息顺序性保障,回溯消费的功能。
4.2 存储系统
Kafka把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险。也正是得益于Kafka的消息持久化功能和多副本机制,我们可以把Kafka作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置为”永久”或启用主题的日志压缩功能。
4.3 流式处理平台
Kafka不仅为流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库,如:窗口、连接、变换、聚合等各类操作。
5、Kafka-高吞吐低延迟
Kafka的数据虽然是写入磁盘,但写入速度是很快的,因为每次都是写入操作系统的页缓存(page cache),然后由操作系统自行决定什么时候把页缓存中的数据写入磁盘上。
5.1 操作系统缓存
页缓存是内存分配的,Kafka不直接参与物理的I/O操作,而是交由操作系统来完成。
5.2 顺序读
Kafka采用追加(append)方式,避免了磁盘的随机读写操作(类比redis的aof持久化)。
5.3 零拷贝
使用sendfile为代表的零拷贝技术加强网络间的数据传输效率;数据直接在内核空间完成输入和输出,不需要拷贝到用户空间再写出去;kafka数据写入磁盘前,数据先写到进程的内存空间。
内核空间和用户空间:
那么为什么从内核空间转向用户空间这段过程会慢呢?首先我们需了解的是什么是内核空间和用户空间。在常用的操作系统中为了保护系统中的核心资源,于是将系统设计为四个区域,越往里权限越大,所以Ring0被称之为内核空间,用来访问一些关键性的资源。Ring3被称之为用户空间。