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,可以节省运维成本