目录
[TOC]
Kafka
1 What’s Kafka?
1.1 概念
起初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于Zookeeper协调的分布式消息系统
目前kafka已经定位为一个分布式流式处理平台,具有高吞吐量、可持久化、可水平拓展、支持流数据处理特性
1.2 作用
消息系统: 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
存储系统: 可以储存流式的记录,并且有较好的容错性。
流处理平台: 可以在流式记录产生时就进行处理。
2 一些概念
一个典型的Kafaka体系架构包括若干Producer、若干Broker、若干Consumer,以及一个Zookeeper集群。Zookeeper集群是Kafka用来负责集群元数据的管理、控制器的选举等操作的。Producer将消息发送到Broker,Broker负责将收到的消息存储到磁盘中,Consumer负责从Broker订阅并消费消息。
Kafka里面的细节概念还有很多,这里只说明一些主要概念
2.1 Producer
生产者
:也就是发送消息的一方。生产者负责创建消息,然后将其投递到Kafka中。
2.2 Consumer
消费者
:也就是接受消息的一方。消费者连接到Kakfa上并接受消息
2.3 Broker
服务代理节点
:Broker可以简单地看成一个独立的kafka服务实例或服务节点。大多数情况下也可以将其看作一台Kafka服务器,前提是这个服务器上只部署了一个Kafka实例
2.4 Topic
主题
:Kafka中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题,而消费者负责订阅主题并进行消费。【发送到Kafka集群中的每一条消息都要指定一个主题】
2.5 Partition
分区
:主题是一个逻辑上的概念,它还可以细分为多个分区,一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。
分区在存储层面可以看作是一个可追加的日志(Log)文件,消息在被追加时会被分配一个偏移量(Offset)
Offset
是消息在分区中的唯一标识,通过它来保证消息的顺序性,Offset不跨分区,即Kafka保证的是分区有序而不是主题有序。分区可以分布在不同的borker上,每一条消息在被发送`broker前,会根据分区规则选择存储到哪个具体的分区。通过修改分区的数量可以实现水平拓展,防止某个服务器机器I/O成为性能瓶颈
2.6 Replica
副本
:上面说一个消息需要被发送到一个主题,而主题又划分成了多个分区。而kafka为了提升容灾能力就引入了多副本机制,一个分区可以有多个副本。副本之间是“一主多从”的关系,其中Leader副本负责处理读写请求,follower副本只负责与leader副本的消息同步。
- 当副本处于不同的broker中,当leader副本出现故障时,从follower副本中重新选举新的leader副本对外提供服务。保证了集群中单个broker失效仍能对外提供服务。
- 在同一个时刻,副本(包括leader、follower)之间的数据本非完全一样,存在滞后可能。
副本,一般不对外提供服务,单纯的备份功能。假如对外提供服务的话,可以会出现数据不一致的情况(与后面的ISR、OSR有关)
2.7 AR、ISR、OSR
AR
:分区中所有副本统称为AR(Assigned Replicas),包括leader与follow
ISR
:所有与leader副本保持一定程度同步的副本(包括leader副本)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。
OSR
:与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)。
消息会先发送的leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间follower相对于leader而言会有一定程度的滞后。前面所说的“一定程度的同步”是指可以忍受的之后范围,此范围可以通过参数配置。即:在此范围内的就是ISR,以外为OSR。正常情况OSR为空集。AR=ISR
2.8 HW、LEO
HW:高水位
LEO:待写入消息的Offset
参考文献
- 深入理解Kafka-核心设计与实践原理
- Kafka官网:http://kafka.apache.org