注:本kafka系列文章是以2.x
版本为例
一、kafka的概念和基本功能
1.什么是kafka
kafka是一个分布式的流处理平台,处理和管理数据流向的平台(消息队列只是其中一个功能)。它是由LinkedIn公司通过Scala语言开发,并捐献给Apache基金会的一个开源软件。
2.kafka的基本功能:
- 消息系统:有发布订阅功能的消息队列,此功能与ActiveMQ、RibbitMQ、RocketMQ类似
- 流处理:在实时系统中记录事件数据
- 数据流存储:在分布式、可复制备份的、可容错的集群中安全的存储数据流
二、kafka的使用场景
- 1.消息系统 : 作为一个消息队列系统,提供消息订阅与发布
- 2.网站用户行为追踪 : 用户操作记录与追踪
- 3.数据指标监控 : 将分布式应用程序中的统计数据聚合到一起,形成一个统计中心
- 4.日志收集聚合 : 将分布式系统中的日志数据聚合到一起,以便统一管理、监控。
- 5.数据流处理 : 在处理由多个阶段组成的管道时处理数据,其中原始输入数据从Kafka主题中消费,然后聚合、扩展或以其他方式转换为新主题以供进一步消费或后续处理
- 6.事件状态追踪 : 记录事件源的状态变更
- 7.分布式系统日志提交 : 作为分布式系统的一种外部提交日志,该日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制。
三、kafka的优势
1.高性能
- 高吞吐量,单机可达到百万级的TPS写入
- 低延迟,时效性高
2.高可用
- 它天然支持分布式,通过分区和备份策略,即使少数机器或节点宕机,也不会丢失数据,不会导致系统不可用
3.消息有序性
- 采用pull方式获取消息,因为消息存储是顺序存储,传输也是按顺序传输,因此通过控制可以保证消息被有序消费
4.在大数据领域和日志领域比较成熟,与其他大数据组件容易集成
- kafka已成为大数据的重要组件,与zookeeper等组件配合,在大数据领域应用非常广泛,技术非常成熟
5.事务消息的支持
- 在kafka中使用@Transactional或KafkaTemplate的executeInTransaction方法很容易实现事务消息
四、kafka的架构
1.kafka的组成
注:上图中的各个组成部分都是一个集群
(1)broker
即为kafka的server端,也就是消息系统kafka本身,它主要负责存储消息
- 存储消息:将消息等数据注册到zookeeper上,另外将消息存储到本地的日志文件中
- 管理消息:主要是管理消息文件,包括索引文件和日志文件
- 分区:将指定的key路由存储到哪个分区上
- 消息副本管理:管理副本文件,维护ISR队列,并管理Leader选举和Follower从ISR中剔除或加入ISR(通过zookeeper)
- 消息同步 : 将消息同步到消息副本上
(2)zookeeper
(3)producer
生产消息,并将生产的消息发送到broker中
(4)consumer
从broker中拉取消息,并告知broker消费状态
- consumer group : 消费者分组,同一个分组中某个成员消费了某个主题的消息,其他成员不再消费该主题的消息
2.kafka的消息组成
- topic : 即消息主题,类似于消息的分类,是消费订阅的最基本的单元
- partition : 分区,是指将某个主题的消息切分成几个块存储到不同的节点上,类似于数据库的分库分表
- message : 具体的一个消息,它包含key,value和timestamp
- key : 消息的标识,作为分区的参考点
- value : 消息的内容
- timestamp : 消息创建时间
3.其他相关概念
(1)生产消息
注:这里的0,1表示消息存储的索引位置
- 生产者生产消费后,将消息发送到broker中,broker根据消息的key计算出它的分区
- 将消息通过追加的方式追加到相应的分区的消息队列中,是有序的插入
(2)消费消息
- 消费者消费消息时根据消费的主题和key,获取消息的索引位置,读取消息,并记录消息消费的位置(offset),并保证不重复消费