Kafka的大概介绍

Apache Kafka是一个分布式流平台,提供发布和订阅记录流、容错的持久存储以及处理记录流的功能。它包括制片API、消费者API、流API、连接器API和管理员API。Kafka中的主题是记录类别,日志由分区组成,每个分区是有序、不变的记录序列。生产者选择记录分配到哪个分区,消费者则以消费者组的形式工作,实现负载均衡和容错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kafka

 

Kafka

ApacheKafka是一个分布式流平台。这到底是什么意思呢?

     流平台具有三个关键功能

  • 发布和订阅记录流,类似于消息队列或企业消息传递系统。
  • 以容错的持久方式存储记录流。
  • 处理发生的记录流。

Kafka通常用于两大类应用程序:

  • 建立实时流数据管道,以可靠地在系统或应用程序之间获取数据
  • 构建实时流应用程序以转换或响应数据流

要了解Kafka如何执行这些操作,让我们从头开始深入研究Kafka的功能

首先几个概念:

  • Kafka在一个或多个可以跨越多个数据中心的服务器上作为集群运行。
  • Kafka集群将记录流存储在称为topic类别中。
  • 每个记录由一个键,一个值和一个时间戳组成。

Kafka具有五个核心API:

  • 制片API允许应用程序发布的记录流至一个或多个卡夫卡的话题。
  • 消费者API允许应用程序订阅一个或多个主题,并处理所产生的对他们记录的数据流。
  • 所述API允许应用程序充当流处理器,从一个或多个主题消耗的输入流,并产生一个输出流至一个或多个输出的主题,有效地将所述输入数据流,以输出流。
  • 连接器API允许构建和运行可重复使用的生产者或消费者连接卡夫卡主题,以现有的应用程序或数据系统。例如,关系数据库的连接器可能会捕获对表的所有更改。
  • 管理员API允许管理和检查的话题,经纪人和其他卡夫卡对象。

 

 

 

  • 在Kafka中,客户端和服务器之间的通信是通过简单,高性能,与语言无关的TCP协议完成的。该协议已版本化,并与旧版本保持向后兼容性。我们为Kafka提供了Java客户端,但是客户端支持多种语言

主题和日志

首先,让我们深入探讨Kafka提供的记录主题的核心抽象。

主题是将记录发布到的类别或订阅源名称。Kafka中的主题始终是多用户的;也就是说,一个主题可以有零个,一个或多个消费者来订阅写入该主题的数据。

对于每个主题,Kafka群集都会维护一个分区日志,如下所示:

 

每个分区都是有序的,不变的记录序列,这些记录连续地附加到结构化的提交日志中。分区中的每个记录均分配有一个称为偏移的顺序ID号,该ID 唯一地标识分区中的每个记录。

Kafka群集使用可配置的保留期限持久保存所有已发布的记录(无论是否已使用它们)。例如,如果将保留策略设置为两天,则在发布记录后的两天内,该记录可供使用,之后将被丢弃以释放空间。Kafka的性能相对于数据大小实际上是恒定的,因此长时间存储数据不是问题。

 

实际上,基于每个消费者保留的唯一元数据是该消费者在日志中的偏移量或位置。此偏移量由使用者控制:通常,使用者在读取记录时会线性地推进其偏移量,但实际上,由于位置是由使用者控制的,因此它可以按喜欢的任何顺序使用记录。例如,使用者可以重置到较旧的偏移量以重新处理过去的数据,或者跳到最近的记录并从现在开始使用。

这些功能的组合意味着Kafka的消费者非常便宜-他们来来去去对集群或其他消费者没有太大影响。例如,您可以使用我们的命令行工具尾部任何主题的内容,而无需更改任何现有使用者所消耗的内容。

日志中的分区有多种用途。首先,它们允许日志扩展到超出单个服务器所能容纳的大小。每个单独的分区必须适合托管它的服务器,但是一个主题可能有很多分区,因此它可以处理任意数量的数据。其次,它们充当并行性的单元-对此稍作介绍。

生产者

生产者将数据发布到他们选择的主题。生产者负责选择将哪个记录分配给主题中的哪个分区。可以简单地为平衡负载而以循环方式完成此操作,也可以根据某些语义分区功能(例如基于记录中的某些键)完成此操作。一秒钟就可以了解更多有关分区的信息!

消费者

消费者使用消费者组名称标记自己,并且发布到某个主题的每条记录都会传递到每个订阅消费者组中的一个消费者实例。使用者实例可以位于单独的进程中,也可以位于单独的机器上。

如果所有使用者实例都具有相同的使用者组,那么将在这些使用者实例上有效地平衡记录。

如果所有使用者实例具有不同的使用者组,则每条记录将广播到所有使用者进程。

 

由两台服务器组成的Kafka群集,其中包含四个带有两个使用者组的分区(P0-P3)。消费者组A有两个消费者实例,而组B有四个。

但是,更常见的是,我们发现主题具有少量的消费者组,每个逻辑订户一个。每个组都由许多使用者实例组成,以实现可伸缩性和容错能力。这无非就是发布-订阅语义,其中订阅者是消费者的集群而不是单个进程。

Kafka中实现消耗的方式是通过在消费者实例上划分日志中的分区,以便每个实例在任何时间点都是分区公平份额的排他消费者。Kafka协议动态处理了维护组成员身份的过程。如果新实例加入该组,它们将接管该组其他成员的某些分区;如果实例死亡,则其分区将分配给其余实例。

卡夫卡只提供了记录的总订单中的一个分区,而不是一个主题的不同分区之间。对于大多数应用程序,按分区排序以及按键对数据进行分区的能力就足够了。但是,如果您需要记录的总订单量,则可以使用只有一个分区的主题来实现,尽管这将意味着每个使用者组只有一个使用者流程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值