一。 简介
- Kafka是一个分布式的流式处理平台,主要包含三个功能:
- 发布和订阅数据,类似于消息队列或者企业中的消息传递系统
- 存储数据的时候有容错(分布式+复本机制)和持久化机制
- 数据产生的时候处理记录(数据),当数据出现,能处理数据
- 生产者和消费者解耦
应用:
1 构建可靠的数据传输的实时流管道
2 在转换或者响应数据流的时候构建实时流程序
kafka采用的是poll的方式的获取数据
概念:
1 topic 主题
- 在Kafka中 ,每一条数据都要归属于某个topic
- topic可以理解为在Kafka中进行消息的分类
- 每一个topic都会在磁盘中产生对应的目录
- topic从逻辑上可以将它看做是一个队列,所以向topic添加数据的时候可以认为是向队列的尾端来添加数据
- 其他的消息队列在数据被消费之后一般会从队列中来移除;但是Kafka默认不移除的
2 partition : 分区
- 设置几个分区,那么对应的topic就会产生几个目录
- 如果有多个节点并且有多个分区,那么这些分区可以分布在不同的节点上
3 replication-factor : 复本因子
- 决定复本的数量
- 以分区作为单元来进行备份
- 在Kafka中,复本的数量不能超过节点的数量
4 当在Kafka中删除topic的时候,不是立即删除
5 如果存在多个分区,那么将数据轮流发到分区中
6 复本之间会选举一个leader,生产者和消费者在操作数据的时候,只和leader交互,也就意味着生产者产生的数据直接放入leader中,消费者直接从leader中拿数据。leader和follower之间会自动进行同步备份
7 在Kafka集群中,没有选举的问题
8 消费者组:将一个或者多个消费者放在同一个组中。如果有消费者组,那么形成组间共享(不同的消费者组可以获取到相同的数据)组内竞争(同一个消费者组中的不同消费者会抢占数据)的特点
kafka消息流过程:
- 生产者产生数据之后,Kafka需要将数据拉取过来
- 访问Zookeeper,获取到复本所对应的leader所在的节点对应的brokerid
- 将操作记录到节点的日志中,下一步将数据放到这个节点上
- follower通过RPC机制来访问leader,做到数据的一致。当leader和follower之间的信息共享完成之后,follower会给leader返回一个ack表示共享成功
- leader也会给生产者发送一个ack信号表示数据已经存储成功
索引机制:
- Kafka每接收一条数据,都会将数据持久化到本地的磁盘上,将数据存储在对应的partition下的log文件里面
- log文件默认是1G大小,当数据量超过log文件大小,就会产生一个新的log文件
- 每一次产生log文件之后,都会以数据偏移量作为log文件的文件名,每一个log文件都会对应一个index文件(log文件+index文件 = segment)
- index文件对log文件中的数据建立了稀疏索引,所以当查询数据的时候先找到对应的index文件,然后利用稀疏索引确定数据在log文件中的范围