Kafka之概念认知(一)
2022-09-22 22:44:35

目录
[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

参考文献

Prev
2022-09-22 22:44:35
Next