Kafka概述
将生产者和消费者解耦
使用消息队列的好处
- 解耦:允许你独立的扩展或修改两边的处理过程,只要确保他们遵守同样的接口约束
- 可恢复性:系统一部分组件失效时,不会影响到整个系统,降低了进程间的耦合度
- 缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息处理速度不一致的情况
- 异步通信
Kafka定义
Kafka是一款基于发布与订阅的消息系统。文件系统或数据库提交日志用来提供所有事务的持久记录,通过重放这些日志可以重建系统的状态。具备数据故障保护和性能伸缩能力。
Kafka基础架构
- Producer,消息生产者,向kafka broker发送信息的客户端
- Consumer,信息消费者,向kafka broker订阅信息的客户端
- Consumer Group,由多个消费者组成。每个消费者负责不同的分区
- Broker,一台kafka服务器就是一个broker,一个集群由多个broker组成,一个broker可以容纳多个topic
- Topic,生产者和消费者面向的都是一个主题
- Partition,一个主题有多个分区,一个分区是一个有序的队列
- Replica,副本,确保节点发生故障时,分区数据不丢失,一个主题的每个分区有多个副本
- leader,分区多个副本的主,生产者发送数据的对象,已经消费者订阅信息的对象
- follower,多个副本的从,实时从leader同步数据,leader发生故障时,folloer替代
消息和批次
Kafka的数据单元被称为消息,可以把消息看作数据库里的一条记录。消息由字节数组组成。
每个消息有一个元数据,键,也是字节数组和值。即固定长度的消息头和可变长度的消息体。
批次就是一组消息,这些消息属于同一个主题和分区。消息分批次传输可以减少网络开销。
主题和分区
消息通过主题分类,主题好比数据库的表,主题可以被分为好几个分区,一个分区就是一个提交日志,消息以追加的方式写入分区,根据先进先出顺序读取。
一个主题的数据看作一个流,流是一组生产者移动到消费者的数据
生产者和消费者
生产者在默认情况下,吧消息均衡地分布到主题的所有分区上,不关心被写到哪个分区。通过消息键和分区器实现分布到具体分区。
消费者读取信息,订阅一个或多个主题。通过检查消息的偏移量来区分已经读取过的消息。偏移量是另一种元数据,它是一个不断递增的整数值。一个分区只能被一个消费者使用。
broker和集群
一个独立的服务器broker,接收来自生产者的信息,为信息设置偏移量,并提交信息到磁盘保护。为消费者提供服务,对读取分区做出相应,返回信息。
每个集群都有一个broker充当集群控制器的角色。控制器负责管理工作,把分区分配给broker和监控broker。一个分区从属于一个broker,一个分区可以分配给多个broker,也就是消息冗余。
kafka安装信息
Kafka需要安装Java和Zookeeper,Kafka使用Zookeeper保存元数据,消费者通过Zookeeper读取元数据分区偏移量,然后在broker读取数据。
- 安装Java
- 安装Zookeeper
- 安装Kafka Broker
配置信息
- broker.id:每个broker都需要一个标识符,在整个集群中时唯一的。
- port:端口默认9092
- zookeeper.connect:指定保存broker元数据的Zookeeper地址
- log.dirs:kafka把所有消息都保存在磁盘上,存放目录通过log.dirs指定,同一个分区的日志片段保存在同一个路径下