• kafka源码1:基本概念和核心架构


    一: kafka组成模型

    Kafka是一个开源的高吞吐量的分布式发布订阅消息系统,由生产者(producer)、消费者(consumer)、服务端broker三者组成。

    二:kafka 集群模型

            Producer(生产者):发送消息

            Consumer(消费者):订阅消息

            Broker:Kafka的节点,服务端

              Controller:Kafka服务器的主节点

              Follower:Kafka服务的从节点

            Topic:主题,类似于数据库里的表

            Partition:分区,一个主题可以有多个分区,类似于数据库里的分区

            Replica:副本,为了保证数据安全,每个Partition可以设置多个副本(leader replica,Follower replica)

            Message:消息,消息存在分区里

           Offset:偏移量,消息存储进度/消费者的消费进度

           zookeeper : 分布式应用程序协调者,在它里面会创建一个目录来管理kafka各个topic 的 partition的offset 信息(kafka 0.8版本和之前,kafka1.0版本去掉了zookeeper维护分区数据偏移量, 改用 _consumer_offsets 主题来维护各个broker中topic的 offsets )

      

     

    三:kafka 服务端(broker)设计

          kafka是一个把性能用到极致的框架,是一个支持高可用、高性能、高并发的分布式消息系统。

            高并发:线程池思想

        

               

            高性能:磁盘的顺序读写设计

             Kafka是将消息记录持久化到本地磁盘中的, 一般人会认为磁盘读写性能差,对Kafka性能如何保证提出质疑。实际上不管是内存还是磁盘,快或慢关键在 于寻址的方式,磁盘分为顺序读写与随机读 写,内存也一样分为顺序读写与随机读写。 基于磁盘的随机读写确实很慢,但磁盘的顺序读写性能却很高,一般而言要高出磁盘随机读写三个数量级,一些情况下磁盘顺序读写性能甚至要高于内存随机读写。

            

            高性能:跳表设计

            log文件:里面存储的是消息

            index文件:存储索引消息。

            这两个文件的文件名相同,成对出现。这个文件名是 以 log 文件里的第一条消息的 offset 命名的,如下第一个文 件的文件名叫 00000000000012768089,代表着这个文件 里的第一个消息的 offset 是 12768089,也就是说第二条消 息就是 12768090 了。

           

              高性能:稀松索引

              index文件中稀松的索引设计思想和 跳表设计的核心思想一样,都是走的范围检索。在索引文件中确定索引所在的index 文件的首个起始index值,然后拿着这个index值去log文件里遍历,直到遍历到自己想要的索引对应的数据文件,然后找到posistion 对应的物理磁盘位置。

             

             高性能:零拷贝

             非零拷贝

             

            零拷贝

            

             零拷贝技术很明显得减少了2次数据传输。第一次是从操作系统的内存中拷贝数据到 kafka的broker里面;第二次是从kafka的broker里面拷贝数据到socket cache 端。

    四:生产端设计

           

               批处理

            

                内存池 

                

                 封装同一服务请求

                 在队列里,会把发往同一个分区的多个批次的数据,合并成一个批次,统一发往下游。

    五:消费者端设计

             P2P模型:也称点对点模型,指同一条消息只能被一个消费者消费,也就是说一个消息如果被这个消费者 消费了,其余的消费者就都不能消费了,传统的消息系统用的就是这种方式。

              发布订阅模型:允许消息被多个Consume r消费,但是一个Consume r需要订阅主题的所有分区。

            

             Kafka的Consumer Group设计

             同一个消费组是P2P方式,一个消息只能被同一个组的一 消费者消费。

            不同组是订阅模式,一个消息可以被不同的消费组 消费。

             一个分区同一时间只会被 同组一个消费者消费。

              

             Consumer设计-偏移量存储

              

             

                  kafka 1.0版本的偏移量存储设计

             

    六:总结

            可以看出kafka是一款性能设计上很花心思、有很多巧妙设计思想的消息中间件产品。

               

  • 相关阅读:
    sql增删改查-转载
    委托和事件 链接
    三层架构-转载
    ToList()方法
    Invoke--转载
    C# 6.0新特性---语法糖
    索引器
    HBase学习总结(1)
    教程-关于Owner和Parent的区别
    问题-在TreeView使用时,发现选中的树节点会闪烁或消失
  • 原文地址:https://www.cnblogs.com/guodong1789/p/16302286.html
Copyright © 2020-2023  润新知