Kafka 介绍

1 Kafka为何是一个分布式流平台

一个流平台有三个关键功能:

  • 发布与订阅记录流,类似于信息队列或企业消息传递系统
  • 通过容错持久的方法存储记录流
  • 当记录流产生时,处理记录流

Kafka通常用于两大类应用:

  • 构建可靠的实时流数据管道,此管道可以用于系统或应用间稳定地获取数据
  • 构建实时流应用,此应用可以用于转化或响应流数据

基础概念

  • Kafka可以运行在由一个或多台服务器构建的集群上,这些服务器可以横跨多个数据中心
  • Kafka分类存储记录流,划分的类别称为主题
  • 每一条记录由键、值、时间戳构成

Kafka具有四类核心APIs:

  • Producer API:允许应用将数据流发布到一个或多个Kafka主题。
  • Consumer API:允许应用订阅一个或多个主题,并处理产生到这些主题中的记录流。
  • Streams API:允许应用表现为流处理器,即消费来自一个或多个主题的输入流,生产流入一个或多个主题的输出流,有效地将输入流转化为输出流。
  • Connector API:允许构建运行可重用的生产者或消费者,这些生产者与消费者将Kafka的主题与已存在的应用或系统连接。eg:一个关系型数据库的连接器,可以捕获表的每一个改变。

接口

Kafka中,客户端与服务器之间的通信通过TCP协议完成。此协议版本化并且向后兼容。

​​​​2 主题与日志

主题是发布记录的类别或源名称。一个主题可以有零个、一个或多个订阅数据的消费者。
对于每个主题,Kafka集群维护一个分区日志。
主题结构

每个分区是一个有序、不可变的记录序列,结构化提交日志不断地添加到此记录序列之后。分区中的每条记录都被分别赋予一个名为offset的顺序id号码,此id唯一标识了分区中的每一条记录。

Kafka集群使用一个可配置的保存期持久保存所有的发布记录,无论它们是否已经被消费。Kafka在数据大小方面的性能实际上是一个常数,所以长时间存储数据并不是一个问题。

在这里插入图片描述

实际上,基于每个消费者保存的元数据只有消费者在日志中的位置或偏移量。偏离量收消费者控制:通常一个消费者会在它读取记录时线性移动其偏移量,但事实上,由于位置由消费者控制,所以消费者可以以任意顺序读取数据。

日志分区由多个目的:
首先,允许日志扩展到超过单个服务器大小的规模,虽然每个分区都应当适应服务器,但是主题由于拥有多个分区所以可以处理任意数量的数据。其次,分区充当了并行的单元

3 分布

每个日志跨越服务器分布在Kafka的集群上,每个服务器处理数据并请求分区共享。每个分区备份在可配置数量的服务器上,以提供容错性。

每个分区都有一个服务器充当“领导者”,零个或多个服务器充当“跟随者”。领导者处理发往分区的所有读写请求,而跟随者被动复制领导者。如果领导者挂了,跟随者中的一个服务器将自动成为新的领导者。每个服务器要么充当分区的领导者,要么成为其他服务器的追随者,就这样在集群中实现了良好的负载均衡。

4 异地备份

Kafka MirrorMaker向集群提供了异地备份支持。通过使用MirrorMaker,信息在多个数据中心或云区域中备份。可以使用这一功能主动或被动进行备份与恢复,或主动将数据放置在靠近用户的地方,以满足数据位置要求。

5 生产者

生产者将数据发布到它们指定的主题之中。生产者负责决定将记录赋给主题的哪一个分区之中。可以根据循环方式来完成分区的选择,这种方案有助于负载均衡,或者也可以根据分区函数的功能来完成分区选择(例如,根据记录的键)。

6 消费者

每个消费者都会被赋予消费者组标签,并且每条发布在主题中的记录都会被发给每个订阅消费者组中的一个消费者实例。消费者实例可以位于不同的进程上,也可以位于不同的机器上。

如果所有的消费者实例都位于相同的消费组中,那么记录实际上会在消费者实例中进行负载均衡。

如果所有的消费者实例都位于不同的消费者组中,每条记录将会被广播到所有的消费者进程。
消费者组
然而,更常见的是,主题具有少量的消费者组,,每个消费者组被称为“逻辑订阅者”。每个消费者组都由许多订阅者实例组成,用以提供容错性与扩展性。这还是发布-订阅的含义,只不过将单进程执行的消费者实例更换为消费者集群。

Kafka中实现消费的方法是将日志中的分区分配到各个消费者实例上,这样每个消费者实例便可以在任何时间点都是分区的“公平份额”的独占消费者。维护组中成员资格的进程由Kafka协议动态处理。如果一个新的实例加入了组,它们将会从组中的其他成员中接管一些分区,如果一个实例被销毁,它的分区将会被分配给剩余的实例。

7 多租户

Kafka可以被部署为多租户解决方案。通过配置用于生产或消费数据的主题,开启多租户。存在支持配额的操作。管理者可以定义并且强制执行配置,实现对客户端使用的代理资源的控制。

8 保证

高级Kafka给出了以下保证:

  • 被消费者发往特定主题分区的消息将会按照发送顺序添加到日志中
  • 消费者实例依照记录在日志中的存储顺序读取记录
  • 对于备份因子为N的主题,它可以在不丢失任何记录的情况下,容忍最多N-1个服务器挂机
9 Kafka作为消息系统

传统的消息系统具有两个模型:队列与发布-订阅。在队列模型中,消费者池从服务器中读取记录,并且记录将会被发往消费者池中的一个消费者,在发布-订阅模型中,记录将会被广播给所有的消费者。

这两个模型都有其优缺点。队列的优点是它允许将数据进程分发到多个消费者实例上,但缺点是它没有多订阅者特性,即一旦一个进程读取了数据,此数据就会被取出。发布-订阅允许将数据广播到多个进程中,但是因为每条信息被发往了每个订阅者,所以没有办法扩展处理。

消费者组的概念结合了以上两种概念。与队列相同,消费者组允许将处理分发到进程集合(消费者的成员)。与发布订阅模型相同,Kafka允许将消息广播到多个消费者组。

Kafka模型的优势便是每个主题集成了以上两个模型,所以它既可以扩展处理过程也可以有多个订阅者。

Kafak比传统信息系统具有更强的顺序保证。

传统队列在服务器上按顺序持有记录,如果多个消费者从队列中消费,那么服务器将按照存储的顺序取出存储的记录。然而,虽然服务器按序取出记录,记录将会被异步发送给消费者,所以它们抵达不同的消费者时,顺序将会被打乱。这实际上意味着,在并行消费发生时,记录的顺序将会被打乱。消息系统通常会使用“独占消费者”的概念(即,只允许一个进程从队列中消费)来处理这一情况,不过,这当然意味着非并行处理。

通过使用主题的并行概念——分区,Kafka同时提供了顺序保证与消费者进程间的负载均衡。通过将主题中的分区赋予消费者组中的消费者,每个分区都将被组中的单个消费者消费。通过这一机制,Kafka确保每个消费者是分区的唯一读者并且按序消费。由于存在多个分区,所以负载均衡在多个消费者实例中达成。注意,消费者组中消费者实例的数量不能超过分区数。

10 Kafka作为存储系统

允许发布消息从消费消息解耦和的消息队列实际上充当了正在使用的消息的存储系统。Kafka的不同之处在于,它本事就是一个很不错的存储系统。

写入Kafka的数据将会被写入磁盘,并且为了容错进行备份。Kafka允许生产者等待确认,因此一个写操作直到备份完成之后才会被认为完成,并且即使服务器写失败,也会继续保持。

Kafka使用的磁盘接口扩展性很好——无论服务器上存储了50KB还是50TB的数据,Kafka都能正常执行。

基于对存储的认真对待以及允许客户端控制读位置,可以将Kafka视为一种特定目的的分布式文件系统,它专用于高性能低延迟的提交日志的存储、备份与传输。

11 Kafka用于流处理

Kafka不仅可以读、写于存储数据流,并且可以进行实时流处理。
Kafka的流处理器是指包含从输入主题中读取连续流,对输入执行流操作,并且生产连续数据流到输出主题的一切东西。

使用生产者与消费者API可以进行简单的直接处理。然而,为了实现更复杂的转换,Kafka提供了继承 Streams API。它允许构建具有计算流聚合或连接流的处理过程的应用。

此工具用于解决这类应用问题:处理无序数据,在代码更改时重新处理输入,执行有状态计算等。

streams API基于Kafaka提供的核心功能实现:它对输入使用了生产者APIs与消费者APIs,对状态存储使用了Kafka,在流处理器实例之间使用了相同的组机制来实现容错。

12 功能集成

Kafka作为一个流平台,集成消息传送、存储与流处理功能十分重要。

类似于HDFS的分布式文件系统允许存储静态文件用于执行批处理。实际上,这样的系统用于存储与处理过去的历史数据。

传统的企业消息传递系统允许处理在订阅后抵达的未来信息。使用这种方式构建的应用用于处理在未来抵达的数据。

Kafka结合了这两种特性,成为流处理应用与流数据管道的平台。

通过结合存储与低延迟订阅,流应用可以使用相同的方式处理过去的数据与未来的数据。这样,单个应用可以处理历史存储的数据并且在未来的数据到达后继续处理,不会在到达最后一条数据时终止处理。这一更为泛化的流处理概念既包括批处理,也包括消息驱动应用。

同样,对于流处理管道,订阅与实时事件的结合使将Kafka用于低延迟管道变得可能,不过数据的可靠存储能力却使将Kafka用于关键数据(数据的传输必须得到保证)或用于与离线系统(周期载入数据或可能长时间停机维护)集成成为可能。流处理工具使转化抵达的数据成为可能。

翻译源:Kafka文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值