Kafka

一、什么是Kafka?Kafka的主要用途?

        Kafka是一个分布式流处理平台,是Apache的一个顶级项目,它被设计用于高吞吐量,分布式、持久性的数据流处理。

       Kafka实现了一套非常高效的一种发布订阅模型,应用场景非常广泛,比如日志聚合(收集日志)、数据流处理、数据仓库集成(传输数据到数据仓库)、应用程序集成(作为消息中间件来实现异步通信)、流媒体处理(列如实时监控,事件驱动的应用程序)

二、topic与partition的关系?

        Topic是Kafka中消息的逻辑分类,可以看作是一个消息的存储类别。它是按照不同的主题对消息进行分类,并且可以用于区分和筛选数据。每个Topic可以有多个Partition,每个Partition都是
Topic的一个子集,包含了一部分特定的消息 。  
        Partition则是Kafka中实际保存数据的单位。每个Topic可以被划分为多个Partition,而这些Partition会尽量平均的分配到各个Broker上。当一条消息发送到Kafka时,它会被分配到一个特定
的Partition中,并最终写入Partition对应的日志文件里。这个分配过程是根据Partition的规则来完成的,比如可以按照消息的某个属性进行哈希或者按照时间戳进行排序等。
        因此,Topic和Partition的关系是,Topic是消息的逻辑分类,用于区分和筛选数据,而Partition则是Topic的物理划分,用于将消息分配到不同的部分中以便于处理和存储。Topic和Partition的设计对于高吞吐量和横向扩展非常有用。因为生产者和消费者只需要根据Topic进行具体的业务实现,而不用关心消息在集群内的分布情况。而在集群内部,这些Partition会尽量平均的
分布在不同的Broker节点上,从而提高了系统整体的性能和可伸缩性。

三、Kafka的消息如何储存的?

       Kafka中的消息是以文件的方式持久化到磁盘中进行存储的,确保消息的可靠性和可用性。Kafka中的消息是通过以下方式进行存储的:
       1.Partition分区:Partition是Kafka中消息存储的基本单位,每个Topic下的消息都会被划分成多个Partition进行管理。每个Partition都是一个有序的、不变的消息队列,消息按照追加的顺序被
添加到队列尾部。
        2.Segment分块:Partition会被进一步划分成多个Segment,Segment是逻辑上的文件组,方便进行数据的管理和查找。每个Segment里都包含多个文件,这些文件名相同且被集合在一起。
        3.文件索引:件Segment中的每个文都有自己的索引文件和数据文件,索引文件存储了当前数据文件的索引信息,而数据文件则存储了当前索引文件名对应的数据信息。
       4.消息偏移:Kafka中的每个消息都会被分配到一个特定的Partition中,然后根据Partition内的Segment划分,被存储到对应的数据文件中。消息的偏移量信息则会被记录在索引文件中。
       5.持久化:Kafka中的每个消息都包含一个64位的偏移量,该偏移量表示消息在Partition中的位置。当消费者读取消息时,可以通过偏移量信息来确定需要从哪个位置开始读取。
Kafka的消息存储是基于日志文件和分区的,确保了消息的可靠性、持久性和高吞吐量。消息被追加到日志文件中,每个消息都有唯一的偏移量,分区和副本机制保证了数据的冗余存储和可用性。这种设计使Kafka成为一个可信赖的消息传递系统,适用于各种实时数据处理、日志聚合和事件驱动应用程序。

四、Kafka是如何消费消息是如何进行的?

         1.生产者负责将消息发布到Kafkabroker。在发布消息时,生产者需要指定目标主题。消息被写入后,将被存储在指定分区的当前副本中。当发送消息失败时,生产者还会提供
确认以及重试机制,以保证消息能够正确的发送到Broker上。
         2.Kafkabroker接收到生产者发送的消息后,会将其存储在内部的缓冲区中,等待消费者拉取。当消费者向broker发送拉取请求时,broker会从缓冲区中获取消息并返回给消费
者。Kafkabroker能够保证消息的可靠性和顺序性,即使在异常情况下(如服务器崩溃),也能够保证消息不会丢失。
       3. 消费者从Kafkabroker中订阅指定的主题,并拉取消息进行消费。消费者可以以同步或异步的方式拉取消息,并对拉取到的消息进行处理。当消费者处理完消息后,会向Kafkabroker发送确认消息,表示消息已经被成功处理。这样可以保证消息被正确处理且不会重复消费。
        总体来说,Kafka通过生产者、Kafkabroker和消费者的协同工作,实现了高吞吐量、高可靠性和高可扩展性的消息传递。

五、Kafka实现数据的高效读取的原因之一是0拷贝技术,请说说啥是0拷贝技术?

        零拷贝是操作系统提供的一种优化IO操作的重要机制。通过零拷贝技术,操作系统可以极大的减少在一次IO操作中,数据从一个内存区域复制到另一个内存区域的次数,以及在此过程中对CPU的性能消耗。零拷贝技术可以极大的提高数据传输的效率,避免不必要的数据拷贝,从而降低系统负载。
        零拷贝有两种实现方式,mmap文件映射和sendfile文件复制。

                  mmap机制主要依赖于内存区域映射技术,可以减少一次IO操作中,内核态与用户态之间的数据传输,从而减少因为上下文切换而带来的CPU性能开销。mmap机制通常适合于对大量小文件的IO操作,Kafka大量的运用mmap机制加口速Partition日志文件的读写过程。
                  sendfile主要依赖于DMA数据传输技术,采用一组单独的指令集来进行负责数据在内存不同区域之间的拷贝过程。这样就不再需要CPU来进行复制,从而减少CPU性能消耗,让CPU可以用于更重要的计算任务。sendfile通常适合于大文件的拷贝传输操作,Kafka大量的运用sendfile机制,加速消息从Partition文件到网卡的传输过程。
        总之,零拷贝是由操作系统提供的一种高效的文件读写技术,而Kafka则大量的运用了零拷贝技术,从而极大的提升了Kafka整体的工作性能。

你可能感兴趣的:(kafka,分布式)