kafka原理解析(适合跟我一样从来为了解过的小白进行了解)

官网:http://kafka.apache.org

1. 定义(简单了解kafka)

  • 最初是由Linkedin公司开发
  • 是个分布式,分区的,多副本的,多订阅者,基于Zookeeper协调的分布式日志系统,常用于web/nginx日志,访问日志,消息服务等等
  • 发布和订阅;存储;处理实时的流式数据流的记录
  • 是一个可持久化分布式的消息队列

2. 于Flume进行比较

  • kafka是一个通用的系统,可有多个生产者和多个消费者共享多个主题(topic)(在主题上发布消息)
  • Flume被设计为往HDFS,HBase发送消息,对HDFS有特殊的优化
  • Hadoop使用Flume;流式处理系统如Storm,Sparkstreaming,会使用kafka

3. kafka架构

kafka原理解析(适合跟我一样从来为了解过的小白进行了解)

  • producer:消息生产者
  • consumer:消息消费者
  • broker:kafka集群的server,负责处理消息的读写,请求,存储
  • topic:消息队列/分类
  • 观察消费者模式
  • 可以在单台的虚拟机上搭建,也可以进行多台真正的分布式

4. 消息存储和生产消费模型

kafka原理解析(适合跟我一样从来为了解过的小白进行了解)
上面的这个图来源于官网,解释了kafka的消息存储,接下来解释一个这个图

  • topic:kafaka通过发布topic来发布消息,消费者通过订阅话题来获得消息,同数据更新的时候也向topic更新,这样订阅者也能获得更新的消息
  • 一个topic分为多个partition
  • 每个partition的内部消息都是强有序的,每个消息都有一个序号(offset)。如上图所示的0,1…
  • 一个partition对应一个broker,而一个broker可以对应多个partition
  • 所存储的消息根据时间策略删除,而不是消费者消费完就删除,当然消息也可不进行消费就删除,消息是可持久化的
  • producer可决定往哪个partition中写消息,可以是轮询的负载均衡,或是基于Hash的partition策略
  • 在进行写消息的时候如图所示是追加
  • offset唯一标识一个消息,因为partition中的消息是强有序的

5. kafka的消息构成

  • 消息是由topic组成的
  • 可以想象为一个队列,一个队列就是一个topic
  • topic分为多个partition(并行的关系)
  • 每个partition中的消息都是强有序的有序队列
  • 这个partition可以理解为一个文件,当数据发送过来的时候它可以在这个partition上面进行追加,kafka和很多消息系统不一样,很多消息系统是消费完了就删除,而kafka是根据时间策略删除,而不是消费完就删除,kafka中的消息可持久化,过期之后进行删除
  • concumer自己维护消费哪个offset
  • 每个concumer都有自己的group
  • group内是queue消费模型
  • 各个concumer消费不同的partition
  • 一个消息在同一个group当中只消费一次
  • group间是publish-subscribe消费模型
  • 各个group各自独立消费,互不影响