Kafka的特点

  • 一个处理持续数据流的组件(流处理)
  • 集群方式运行,可以自由伸缩
  • Kafka可以持久化保存数据,保存多久都可以
  • 不止是一个消息队列,更像一个实时版的Hadoop
  • 基于磁盘的数据存储,多种保留规则
  • 高扩展、高性能

应用场景

  • 微服务系统的消息总线(事件驱动)
  • 流式应用
  • 大规模数据管道
  • 用户活动跟踪
  • 传递消息(向用户发送通知)
  • 度量指标和日志记录
  • 提交日志

概念

  • 消息:Kafka的数据单元,由字节数组组成,消息没有特别的格式和意义。消息有一个Key,Key也是字节数组
  • 批次:批次是一组消息,这些消息属于同一个主题和分区。消息组成批次传输,以节省网络开销
  • 模式(schema):使用Apache Avro,模式与消息分离,支持强类型,既向前兼容,也向后兼容
  • 主题:消息通过主题进行分类。由于主题可能会被拆分成多个分区,所以无法保证整个主题范围内的消息顺序
  • 分区:一个主题会被拆成多个分区,分布在多个服务器上,以实现数据冗余和伸缩性
  • 生产者:创建消息的客户端
  • 消费者:读取消息的客户端
  • 偏移量:提供给消费者用以判断消息是否读取过的一种元数据。消费者会把每一个分区最后读取的消息偏移量保存到Zookeeper或者Kafka上。消费者即使重启,它的读取状态也不会丢失
  • 消费者群组:一个或者多个消费者共同读取一个主题,群组保证每个分区只能被一个消费者使用(消:分=1:N),如果一个消费者失效,群组中的其他消费者可以接管它的工作。消费者和分区之间的映射关系通常称为消费者对分区的所有权关系
  • Broker:一个独立的Kafka服务器被称为Broker。Broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。单个Broker可以处理数千个分区以及每秒百万级的消息量
  • 集群:由Broker组成,提供服务的整体
  • 保留消息:Kafka的一个重要特性。支持设置保留时间或者保留总大小,以及一些特别的保留机制

分区数量的简单计算方法

分区个数 = 主题吞吐量 / 一个消费者的吞吐量

服务器硬件指标优先顺序

磁盘吞吐量 > 磁盘容量 > 内存 > 网络 > CPU

云端的Kafka

  • 对写入延迟要求不高,需要较长时间保存数据 -> 选用弹性块存储
  • 对写入延迟要求较高,数据保存时间有限 -> 选用SSD
  • 都要 -> 花钱

单机的Kafka

在每秒百万级以下、不需要高可用时,可以使用单机Kafka,可以节省运维成本