kafka学习笔记

简介

一个分布式的、可分区的、可复制的消息系统

分布式发布-订阅消息系统

概念解析

broker

即Kafka的服务器,用户存储消息,Kafa集群中的一台或多台服务器统称为 broker。

消费者分组

Group,用于归组同类消费者,在Kafka中,多个消费者可以共同消费一个Topic下的消息,每个消费者消费其中的部分消息,这些消费者就组成了一个分组,拥有同一个分组名称,通常也被称为消费者集群。

Offset

消息在文件中的偏移量

Partition

Parition是物理上的概念,每个Topic包含一个或多个Partition.

物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。

ISR

处于同步状态的副本的集合

ISR是由leader维护,follower从leader同步数据有一些延迟(具体可以参见 图文了解 Kafka 的副本复制机制),超过相应的阈值会把 follower 剔除出 ISR, 存入OSR(Out-of-Sync Replicas )列表,新加入的follower也会先存放在OSR中。AR=ISR+OSR。

应用场景

  • 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。
  • 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)

核心API

  • Producer API
  • Consumer API
  • Streams API
  • Connector API

发布消息通常有两种模式

  • 队列模式(queuing):每个消息只被其中一个consumer读到
  • 发布-订阅模式(publish-subscribe):消息被广播到所有的consumer中

Kafka判断一个节点是否活着有两个条件

  • 节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接。
  • 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久。

当所有的副本都down掉时,有以下两种选择

  • 等待ISR中的任何一个节点恢复并担任leader。
  • 选择所有节点中(不只是ISR)第一个恢复的节点作为leader.(Kafka目前选择了第二种策略)

消息的格式

  • offset列表:日志的位置指针
  • 日志文件:一个4字节整型数值(值为N+5),1个字节的”magic value”,4个字节的CRC校验码,其后跟N个字节的消息体
    消息长度: 4 bytes (value: 1+4+n)
    版本号: 1 byte
    CRC校验码: 4 bytes
    具体的消息: n bytes
 

删除策略

  • 删除修改时间在N天之前的日志(时间)
  • 保留最后的N GB数据(大小)
Author: bkdwei