Kafka架构
Kafka架构
1、介绍
kafka是最初由linkedin公司开发的,使用scala语言编写,kafka是一个分布式,分区的,多副本的,多订阅者的日志系统(分布式MQ系统),可以用于搜索日志,监控日志,访问日志等
特点:
可靠性、可扩展性、耐用性、性能好、速度快
主要应用场景
指标分析、日志聚合解决办法、流式处理
2、架构
Kafka:Kafka Server 【Broker节点】,一台机器就是一个Broker
Zookeeper:zkServer 存储元数据,选举副本
producer:生产者,生产的消息通过topic进行归类,保存到kafka的broker
consumer:消费者
consumer group :消费者组,一个组中可以有多个消费者,但topic中的一条数据只能被其中一个消费者消费
topic:主题,用于区分不同业务的数据,给数据进行分类别存储(表)
kafka将消息以topic为单位进行归类
支持多用户订阅,可以为零,一,或者多个消费者的订阅
可以有无数个主题
partition:分区,为了方便将topic进行分布式存储,将topic中的数据按照分区存储(region)
每一个分区都是有序的,先进先出
offset:偏移量,任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量)
分区规则:只有value,没有key,轮询
有keyvalue,按照key.hashCode%numpartitions
指定分区号
自定义分区
每一个分区都有一个编号
分区名称:topic名称+分区号
replication:副本,为分区创建多个副本,同一个分区的每个副本存储在不同的机器上
副本的个数最多是机器的个数,一般等于机器的个数
所有的副本是有主从关系
- leader:负责生产者的写和消费者的读
- follower:不断与leader同步数据,保证数据一致性
- ISR:当前可用的副本,进行选举
segement:基于分区之下的逻辑存储单元,里面有成对的log和index文件
.log:kafka真正数据存储的位置,数据
最多存储1G数据
底层按key,value存储
文件名:长度19位,当前文件在整个分区中偏移量的起始位置
.index:与.log文件成对出现,数据的索引,记录稀疏的索引信息
第一列为offset,
第二列就是要查找的数据在该.log文件中硬盘存储的偏移量
3、检索流程
消费者根据上一次的分区的offset来消费新的数据
先进入对应的分区
检索对应.log,通过文件名中的起始偏移量位置
读取对应的.index文件,使用二分法来实现具体偏移量的定位