zoukankan      html  css  js  c++  java
  • Kafka介绍

    1.1 应用场景

      日志聚合、数据监控、流处理等等

    1.2 高吞吐率实现

      Kafka将消息写入到低速大容量的硬盘,但仍然保持了超高的吞吐率,是因为:

    • 顺序读写:在segment中采用顺序写
    • 零拷贝:生产者、消费者对Kafka中的消息操作采用零拷贝实现
    • 批量发送:Kafka允许使用批量消息发送模式
    • 消息压缩:Kafka支持对消息集合进行压缩

    1.3 基本术语

      1.3.1 Topic

      1.3.2 Partition

        分区,一个topic下的消息存在于若干分区中,一个分区只能由一组消费者中的一个消费,类似于RocketMQ中的queue

      1.3.3 Segment

        段,一个partition分成了若干segment文件,每个segment文件的最大大小相等,顺序写。segment文件名代表当前segment之前有多少条消息(每个partition单独算,其第一个segment全24个0)

        segment文件由两部分组成,.index文件和.log文件,这两名字一样,后缀不同。

        index文件存索引,每条数据两部分组成,第一部分代表在这个segment中相对位置,比如第一个数据为0,第二部分为数据在log文件中存储的物理位置

        log文件存数据,每条数据三部分组成,第一部分为该消息在partition中的位置,第二部分是消息的大小,第三部分为消息的具体内容

        消息查找的过程:1、根据消息编号二分法找到index文件 2、计算相对位置找到index中对应数据记录 3、根据数据的第二部分去log文件找消息

      1.3.4 Broker

        partition的数量一般设置为是broker的整数倍,即一个Topic在每个broker中平均存在一个或多个partition

      1.3.5 Producer

        将消息发送到Topic下的对应partition中

      1.3.6 Consumer Group

        一组消费者组成一个消费者组,这组消费者平均消费partition

      1.3.7 Replicas of partition

        每个Partition会有备份,备份不会处理请求。备份称为Partition Follower,主机称为Partition Leader

      1.3.8 Partition Leader

      1.3.9 Partition Follower

      1.3.10 ISR

        ISR,需要同步的Follower

        OSR,同步失败的Follower,一旦同步失败,从ISR中移到OSR中

        AR,所有的Follower,ISR+OSR

      1.3.11 offset

        偏移量,每个partition单独计算,指消息在partition中的名次

      1.3.12 offset commit

        消费者消费完消息后,会将已消费消息的offset同步给broker。

      1.3.13 Rebalance

        当消费者或者partition数量发生变化时,会触发rebalance,重新调整每个消费者消费partition的关系,在此期间,消费者无法消费消息。

      1.3.14 __consumer_offsets

        之前由ZooKeeper来维护消费进度,但之后由broker自己维护。消费者提交的offset被封装成特殊的消息,key是消费者组Id,写入到由系统创建的、名称为__consumer_offset的特殊主题中,该主题下有50个分区,由 Math.abs(groupID.hashCode())%50 计算投放的分区

      1.3.15 Broker Controller

        集群中有多个broker,会有一个被选举为controller,负责管理Partition和其副本的管理,包括Leader的选举,默认选举规则是谁先创建,谁当Leader。还有比如指挥Leader从OSR中检测并恢复follower到ISR

      1.3.16 Zookeeper

        Zookeeper负责维护和协调broker,负责Broker Controller的选举

      1.3.17 Group Coordinator

        这是运行在broker上的进程,主要用于消费者组中每个消费者的offset的管理和Rebalance。同时管理当前broker的所有消费者组。

        consumer是从coordinator的缓存中获取消费进度的,当consumer消费完毕提交offset到__consumer_offsets的partiton,会同时提交到这个缓存

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    Zookeeper实现配置中心
    Springboot
    分布式事务框架
    Spring 事件Application Event
    了解“事务机制” 过程
    mysql : 行锁,表锁,共享锁,排他锁,悲观锁,乐观锁
    数据库隔离级别和实现原理
    aop用于日志
    exceptionHandler統一处理异常
    mysql 点总结
  • 原文地址:https://www.cnblogs.com/walker993/p/14801306.html
Copyright © 2011-2022 走看看