Kafka 基本概念

kafka 是一种分布式消息队列系统。

介绍

使用scala 开发, 支持多客户端

producer: 消息发布者

broker: 消息中间件处理节点,一个kafka节点就是一个broker

consumer: 消息订阅者

消息

kafka的消息:

  1. Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责多个topic的分发
  2. Partition: Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
  3. Message:消息,最小订阅单元

流程

  1. Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
  2. kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
  3. Consumer从kafka集群pull数据,并控制获取消息的offset

高吞吐率

  • 顺序读写:kafka的消息是不断追加到文件中的,充分利用磁盘的顺序读写性能
  • 零拷贝:跳过用户缓冲区
  • Topic 分为多个partition :每次文件操作都是对一个小文件的操作
  • 消息批量发送:减少服务端 I/O
  • 数据压缩

load balance&HA

  1. producer根据用户指定的算法,将消息发送到指定的partition
  2. 存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上
  3. 多个partition需要选取出lead partition,lead partition负责读写,并由zookeeper负责fail over
  4. 通过zookeeper管理broker与consumer的动态加入与离开

pull-based system

由于kafka broker会持久化数据,broker没有内存压力,因此,consumer非常适合采取pull的方式消费数据,具有以下几点好处:

  1. 简化kafka设计
  2. consumer根据消费能力自主控制消息拉取速度
  3. consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等

Scale Out

当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。

参考

发表评论