认识KafKa-KafKa架构深度剖析

版权声明:路漫漫其修远兮,吾将上下而求索。 https://blog.csdn.net/Happy_Sunshine_Boy/article/details/86238027

为什么会有消息队列

  • 解耦
  • 扩展 能力
  • 持久化
  • 峰值处理能力
  • 可恢复

消息队列种类

ActivaMQ

  • 基于JMS规范
  • 支持事务

KafKa

  • 轻量级,不完全服从JMS
  • 无状态代理
  • 消费者分组:每个消费者属于一个分组,每个消息可以被多个分组获得,但在一个分组中只有一个消费者获得
  • 主题和分区

KafKa架构介绍

  • 生产者、消费者、Broker(代理)、Zookeeper
    在这里插入图片描述

Topic

  • KafKa用topic组织消息
  • 每条消息都属于且仅属于一个Topic
  • Producer发布数据时,必须指定该消息发布到哪一个Topic
  • Consumer订阅消息时,也必须指定订阅哪个Topic的消息
  • 一个Topic的消息可分布在一个或多个节点(Broker)上
  • 一个Topic包含一个或多个Partition

Partition(类似磁盘目录) & segment(类似磁盘文件)

  • 在KafKa的文件存储中,同一个topic下有多个不同的partition(每个topic有几个partition是在创建topic是指定的),每一个partition为一个目录,partition命名规则为<topic名称-有序序号>,第一个partition的有序序号为0,最后一个partition的有序序号是partition数量减1。比如:创建一个名为test的topic,有5个partition,则就有5个目录:test-0,test-1,test-2,test-3,test-4。
  • 每个partition(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中,但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。默认保留7天的数据。
  • segment file由两大部分组成,分别为index file和data file,此两个文件一一对应,成对出现,后缀为“.index”和“.log”分别为segment的索引文件和数据文件。
    00000000000000000000.index
    00000000000000000000.log

消息

  • 记录只会被追加到segment中,不会被单独删除或者修改。
  • 清除过期日志时,直接删除一个或多个segment,保留策略。
  • 每个消息只属于一个并且只属于一个topic。
    在这里插入图片描述

Consumer group

  • 每个consumer只是consumer group中的一个进程。一个topic中的一条消息只能被consumer group中的一个consumer进程消费。也就是说,如果要求topic中中的某消息被多个consumer消费,则这些consumer必须在不同的consumer group中。
    在这里插入图片描述

offset(偏移量)

  • broker是无状态的,也就是说,在broker中不存储哪些消息被哪些consumer消费了,这些消费记录被设计存储在consumer中。consumer总是从一个特定的partition顺序地消费消息,并应答消费了的消息的offset。

猜你喜欢

转载自blog.csdn.net/Happy_Sunshine_Boy/article/details/86238027