kafka详解
一、简介
kafka是一个高吞吐的分布式消息系统,生产者生产数据,消费者消费数据。
二、基本架构
kafka是一个去中心化的架构,元数据存储在zookeeper中,数据存在硬盘上。
producer:消息生存者
consumer:消息消费者
broker:kafka集群的server,负责处理消息读、写请求,存储消息
topic:topic就相当于queue,消息队列/分类
一个topic就是一个表,一个分区对应一个文件,一个broker对应一个节点,可以管理topic的多个分区,生产者往broker追加写数据,消费者从broker拉取数据,数据默认存7天,实现容错性
三、基本概念
-
消息:Kafka 中的基本数据单元,由键(key)、值(value)和时间戳等组成。消息可以是任何类型的数据,如文本、JSON、二进制等。
-
主题:消息的分类或类别,类似于数据库中的表。生产者将消息发送到特定的主题,消费者从主题中订阅并接收消息。
-
分区:为了实现分布式和高吞吐量,每个主题可以分为多个分区。分区是有序的、不可变的消息序列,每个分区每个副本在物理上对应一个文件夹,存储该分区的所有消息。
-
生产者:负责向 Kafka 集群发送消息的客户端应用程序。生产者可以将消息发送到指定的主题和分区,并可以选择同步或异步发送。
-
消费者:从 Kafka 集群中订阅并接收消息的客户端应用程序。消费者可以以组的形式进行消费,同一个组内的消费者共同消费一个主题的所有分区,实现负载均衡和容错。
-
消费者组:多个消费者组成的一个逻辑分组,共同消费一个或多个主题的消息。消费者组内的消费者可以动态加入或离开,Kafka 会自动进行负载均衡和消息分配。
四、kafka特点
(1)缓存减压
(2)分布式:保证数据不丢失
(3)持久化,数据持久化在磁盘中
(4)生产者消费者模型
(5)高吞吐量,能够处理大量的消息,支持每秒数百万条消息的生产和消费。
(6)实时性,能够实时处理消息,支持流处理和实时分析。
五、kafka性能好的原因
(1)kafka写磁盘是顺序的,所以不断的往前产生,不断的往后写
(2)kafka还用了sendFile的0拷贝技术,避免了数据在用户空间和内存空间之间的拷贝,提高速度
(3)用到了批量读写,一批批往里写,如64K为单位
六、零拷贝和非零拷贝
非零拷贝:我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送文件时,不需要将文件内容拷贝到用户空间(User Space)而直接在内核空间(Kernel Space)中传输到网络的方式。
零拷贝:Zero Copy的模式中,避免了数据在用户空间和内存空间之间的拷贝,从而提高了系统的整体性能。
七、kafka的消息存储和生产消费模型
(1)一个topic分成多个partition
(2)每个partition内部消息强有序,其中的每个消息都有一个序号叫offset
(3)一个partition只对应一个broker,一个broker可以管多个partition
(4)消息不经过内存缓冲,直接写入文件,根据时间策略删除,而不是消费完就删除
(5)producer自己决定往哪个partition写消息,可以是(默认)轮询的负载均衡(分布式,一条一条写),或者是基于hash的partition策略(可能数据倾斜)
八、kafka如何保证数据不丢失
(1)副本机制,在正常情况下,只要数据保存成功之后就肯定不会丢失,尽管没有副本也没影响
(2)在有副本的情况下,比如往某一个副本写数据任务失败或者某个节点挂掉了,通过acks 参数设置,在生产者生产数据时,等待所有同步副本(ISR)都成功接收并写入消息后,才收到确认,并继续生产以确保数据不丢失。
九、kafka使用场景
- 日志收集:收集各种系统和应用的日志数据,统一存储和管理,方便后续的查询和分析。
- 消息队列:作为消息队列系统,实现应用程序之间的异步通信和解耦,提高系统的可扩展性和可靠性。
- 实时流处理:对实时产生的消息进行处理和分析,如实时监控、实时推荐、实时报警等。
- 数据集成:在不同的系统和数据源之间进行数据集成和传输,实现数据的共享和交换。