kafka详解

kafka详解

一、简介

kafka是一个高吞吐的分布式消息系统,生产者生产数据,消费者消费数据。

二、基本架构

image-20241215225731485

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)中传输到网络的方式。

    image-20241215225459149

    零拷贝:Zero Copy的模式中,避免了数据在用户空间和内存空间之间的拷贝,从而提高了系统的整体性能。

    image-20241215225416171

    七、kafka的消息存储和生产消费模型

    image-20241215230044646

    (1)一个topic分成多个partition
    (2)每个partition内部消息强有序,其中的每个消息都有一个序号叫offset
    (3)一个partition只对应一个broker,一个broker可以管多个partition
    (4)消息不经过内存缓冲,直接写入文件,根据时间策略删除,而不是消费完就删除
    (5)producer自己决定往哪个partition写消息,可以是(默认)轮询的负载均衡(分布式,一条一条写),或者是基于hash的partition策略(可能数据倾斜)

八、kafka如何保证数据不丢失

(1)副本机制,在正常情况下,只要数据保存成功之后就肯定不会丢失,尽管没有副本也没影响

(2)在有副本的情况下,比如往某一个副本写数据任务失败或者某个节点挂掉了,通过acks 参数设置,在生产者生产数据时,等待所有同步副本(ISR)都成功接收并写入消息后,才收到确认,并继续生产以确保数据不丢失。

九、kafka使用场景

  • 日志收集:收集各种系统和应用的日志数据,统一存储和管理,方便后续的查询和分析。
  • 消息队列:作为消息队列系统,实现应用程序之间的异步通信和解耦,提高系统的可扩展性和可靠性。
  • 实时流处理:对实时产生的消息进行处理和分析,如实时监控、实时推荐、实时报警等。
  • 数据集成:在不同的系统和数据源之间进行数据集成和传输,实现数据的共享和交换。
posted @ 2024-12-15 23:22  hello_future  阅读(408)  评论(0)    收藏  举报