1.Kafka概述
1.1 kafka具备三项关键能力
- 发布订阅记录流(Record),类似于消息队列(MQ)或者企业级消息系统。
- 存储记录流,以一种容错持久化方式。
- 实时处理加工流数据。
1.2 kafka的应用场景
- 构建实时的流数据管道,可靠的在系统和应用间获取数据。
- 构建实时的流数据应用,传输或者处理加工流数据。
1.3 kafka中的核心概念
- Broker(中间人或者代理人):一个kafka服务实例。
- Topic(主题):某一个类别的记录。
- Partition(分区):对主题进行数据分区,一个主题有多个数据分区构成。
- Replication(复制):主题主分区中的数据备份,故障恢复。
- Leader(主分区):主题的主分区 读写操作默认使用主分区。
- Follower(复制分区):同步主分区中的数据(冗余备份),当主分区不可用时,某个follower会自动升级为主分区。
- Offset(偏移量):标识读写操作的位置,读offset<=写offset
1.4 kafka的四大核心API
- The Producer API:允许应用发布记录流给一个或者多个Topic。
- The Consumer API :允许应用订阅一个或者多个主题,并且对主题中新产生的记录进行处理。
- The Streams API:允许应用扮演流处理器,消费来自于一个或者多个主题流数据记录,并且将处理的结果输出到一个或者多个主题中,Streams API可以高效的处理传输数据。
- The Connector API:连接外部的存储系统。
1.5 kafka中的一些基本概念
1.5.1 Topic和日志
kafka的一个Topic(主题)在集群内部实际上是有1到N个Partition(分区)构成,每一个Partition都有一个有序的,持续追加的Recode队列,一个Partition是一个Structured commit log(结构化的提交日志)。
Record持久化存放在kafka集群中的,Record会有一个保留周期(通常默认168小时),如果超期,不论Record是否消费,kafka都会丢弃。理论上来说,kafka容量维持在一个合理的范围区间之内(不断产生新数据,不断丢弃过期)
kafka 中反每一个Record在分区中都有唯一的offser,offset会随着分区不断写入数据有序递增。并且Consumer会保留一个元数据(offset | position,记录了Consumer消费的位置),kafka这种机制为我们提供Record重复处理或者跳过不感兴趣Record处理的功能。
1.5.2 生产者(Producer)
- kafka Producer(生产者)是用来产生持续Record,并且发布到kafka某一个或者多个Topic中。
- 一个Record是由
key value timestamp
构成。 - 发布Record时的策略:
- key=null:轮询
Partition
. - key!=null:
key.hashCode % partitionNum = 存放Record分区的序号
- 手动指定Partition序号:Producer一方在发布Record时手动指定要存放的分区序号。
- key=null:轮询
1.5.3 消费者(Consumer)
Kafka Consumer(消费者)订阅一个或者多个感兴趣的Topic,一旦这些Topic中有新的数据产生,会立即拉取到本地(Consumer)一方,进行相应的业务处理。
kafka使用Consumer Group 组织管理Consumer,Consumer Group 特点:组外广播, 组内负载均衡。
2.Kafka架构
2.1 工作原理
- 首先Producer产生Record发送给指定的Kafka Topic(Topic实质是有多个分区构成,每一个分区都会产生相应的复制分区),在真正存放到kafka集群时会进行计算
key.hashCode%topicPartitionNums
等于要存放的分区序号。 - Leader分区中的数据会自动同步到Follower分区中,Zookeeper会实时监控服务健康信息,一旦发生故障,会立即进行故障转移操作(将一个Follower复制分区自动升级为Leader主分区)
- Kafka一个分区实际上是一个有序的
Record
和Queue
(符合队列的数据结构,先进先出),分区中新增的数据,会添加到队列的末尾,在处理时,会从队列的头部开始消费数据。Queue
在标识读写操作位置时,会使用一个offset(读的offset<=写的offset)。 - 最后Consumer会订阅一个
Kafka Topic
,一旦Topic中有新的数据产生,Consumser立即拉取最新的记录,进行相应的业务处理。