什么是 Apache Kafka?

Apache Kafka 是一个开源的分布式发布 - 接收消息传递平台,专为处理分布式流、流水线传输和数据馈送重放的实时流数据而构建,以实现快速、可扩展的操作。

Kafka 是一种基于中介形式的解决方案,通过在服务器群集内将数据流作为记录维护来运行。Kafka 服务器可以跨多个数据中心,通过在主题中存储多个服务器实例的记录(消息)流来提供数据持续。主题将记录或消息存储为一系列元组、一系列不可变的 Python 对象,其中包括键、值和时间戳。

Apache Kafka 图表

Apache Kafka 的使用案例

Apache Kafka 是当今市场上增长最快的开源消息传递解决方案之一。这主要是由于体系结构设计模式为分布式系统, 提供了卓越的日志记录机制。

Apache Kafka 专为实时日志流打造,非常适合具有以下需求的应用程式:

  • 不同组件之间可靠的数据交换
  • 随着应用程需求的变化对消息传递工作负载进行区分的能力
  • 数据处理的实时串流
  • 对数据/消息重放的原生支持

Apache Kafka 的概念

主题: 主题是发布/接收消息传递中相当普遍的概念。在 Apache Kafka 和其他消息传递解决方案中,主题是用于对给定数据流(一系列记录/消息)显示出兴趣的可寻址抽象过程。主题可以发布和接收,它是一个通过应用程式对给定数据流显示出兴趣的抽象层。

分区: 在 Apache Kafka 中,主题可以细分为一系列称为分区的顺序队列。这些分区会不断附加以形成一个顺序提交日志。在 Kafka 系统中,每条记录/消息都被分配一个称为偏移量的连续 ID,用于标识给定分区中的消息或记录。

持久性: Apache Kafka 的运行方式是维护一个可在发布时持久保存记录/消息的服务器群集。无论使用情况如何, Kafka 集群使用可配置的保留超时来确定给定记录保留多长时间。当记录/消息在保留超时之内,记录/消息可供使用。一旦记录/消息超过此保留超时,记录/消息将被删除并释放空间。

主题/分区扩展: 由于 Apache Kafka 作为服务器集群运行,因此可以通过将负载共享给定主题/分区上的每台服务器来扩展主题/分区。这种负载共享使 Kafka 群集中的每台服务器都能够处理给定主题/分区上记录/消息的分发和持續。虽然单个服务器处理所有的分发和持续,但所有服务器都会复制数据,在服务器出现故障时提供容错能力和高可用分区。在选择一台服务器作为分区领导者的服务器和所有其他服务器作为跟随者的服务器之间对分区进行分割。作为分区领导者的服务器处理数据的所有分发和持续(读/写),跟随者提供用于容错的复制服务。

生产者: 在 Apache Kafka 中,生产者的概念与大多数消息传递系统没有什么不同。数据生产者(记录/消息)定义了给定记录/消息应在哪个主题(数据流)上发布。由于分区用于提供额外的可扩展性,因此生产者还可以定义给定记录/消息发布到哪个分区。生产者不一定要定义给定的分区,也可以通过不定义分区来实现跨主题分区的循环式负载平衡。

消费者: 与大多数消息传递系统一样,Kafka 的消费者是处理记录/消息的实体。消费者可配置为独立处理各个工作负载,或者与其他消费者就给定工作负载进行合作(负载平衡)的形式。消费者根据其消费者组名称管理其处理工作负载的方式。使用消费者组名称可以在单个进程中、跨多个进程甚至跨多个系统来分发消费者。使用消费者组名称,消费者可以对整个消费者集的记录/消息使用进行负载平衡(具有相同消费者组名称的多个消费者),也可以唯一处理每条记录/消息(具有唯一消费者组名称的多个消费者),每个消费者都接收了主题/分区获取要处理的消息。

如何在 Kafka、Pulsar 和其他消息传递技术之间进行选择
在 Kafka、Pulsar 和其他消息传递技术之间进行选择
如何选择适合您业务的消息传递技术?阅读我们最新的白皮书以了解更多信息。

Apache Kafka 的商业效益

由于 Apache Kafka 旨在满足其设计目标,因此具有一些显著的效益。Apache Kafka 在过去和现在设计时都考虑了三个主要要求:

  • 为数据分发和使用提供发布/接收消息模型
  • 允许长期存储可随时间存取和重放的数据
  • 支持实时存取数据以提供实时流处理的能力

这就是 Apache Kafka 真正闪光的地方。与某些消息传递系统不同,它不为交易性或不同的分发模型提供所有的警报。它的重点是为支持流处理的发布/接收模型提供数据分发。

其次,由于 Apache Kafka 从一开始被设计为提供长期数据存储和数据重放,因此它能够独特地处理数据持续、容错性和重放问题。Apache Kafka 如何处理集群中的数据复制的持续、通过允许跨分区共享数据以增加数据量和负载的可扩展性以及使用主题/分区、数据偏移和消费者组名称存取数据,这一点可以很清楚地看出。

最后,由于 Apache Kafka 最初设计用作实时日志处理的通信层,因此它自然地适用于实时流处理应用程序。这使得 Apache Kafka 非常适合利用可实时分发大量数据的通信基础设施的应用程式。

无缝消息传递和流功能: 与传统通信模型相比,在处理大量数据时,消息传递可以为通信和可扩展性提供显著优势。通过融合消息和流功能,Apache Kafka 提供了一种独特的实时发布、接收、存储和处理记录的能力。

用于数据重放的基于时间的数据保留: Apache Kafka 能够在整个集群中将数据原生持续存储到磁盘中,这使得可采用简单的方法来容错。再加上根据基于时间的保留期调用存储的数据,并根据顺序偏移存取数据的能力,Apache Kafka 在集群设置中提供了一种强大的数据存储和检索方法。

流处理的基本方法: 能够快速高效地移动数据是互连的关键。Apache Kafka 为无缝移动数据提供了基础,无论是记录、消息还是流。在检查、转换和利用数据之前,您需要能够将数据从一个地方实时移动到另一个地方,而 Apache Kafka 提供了一种实时移动和存储数据的原生方法。

原生集成支持: “一刀切” 从来不是一种好的方法,Apache Kafka 通过使用 Connector API 提供原生集成点来提供扩展和增长的原生能力。使用 Apache Kafka Connector API,应用程式可以通过预构建的连接器、开源工具与第三方解决方案、其他消息传递系统和旧版应用程式集成,或根据应用需求有目的地构建连接器。

把 Apache Kafka 付诸行动

Apache Kafka 可用于多种应用程式类型(从实时消息分发到流式事件),以支持事件驱动的架构。例如,一家制造公司正在转向事件驱动型架构,以提供更多的自动化、更多的跟踪以及更快的产品和服务交付。尽管提供端到端 事件驱动型架构 需要许多组件,但通信是事件流如何传输和处理的基础。Apache Kafka 为以轻量级分布式方式实现数据分发和流式传输提供了理想的解决方案。借助 Apache Kafka,流程记录/消息可以流式传输到一个或多个应用程序带来额外工作负载,因为产品是在制造过程中移动的。同样,可以在通过生产线处理产品时生成和跟踪通知;与仅在流程结束时才能发现异常的手动流程相比,可以实时捕获和处理异常。最后,通过详细了解产品在制造过程中的位置以及产品的组装、测试和交付方式,可以增强消费者体验。

除了增加上市时间并降低成本,所有这些改进的核心是 Apache Kafka 作为一個神经中枢系统提供了数据分发和通信。