初学者Kafka教程——开始使用分布式系统

186 阅读7分钟

分布式系统是计算机的集合,它们一起工作,为终端用户形成一个单一的计算机。它们允许我们以指数级的速度进行扩展,它们可以处理数十亿的请求和升级,而不会出现停机。Apache Kafka已经成为目前市场上使用最广泛的分布式系统之一。

根据Kafka的官方网站,Apache Kafka是一个*"开源的分布式事件流平台,被成千上万的公司用于高性能数据管道、流分析、数据集成和关键任务应用"。*大多数财富100强公司都在使用Kafka,包括像LinkedIn、Netflix和微软这样的大型科技公司。

在这个Apache Kafka教程中,我们将讨论这个分布式流媒体平台的用途、关键特征和架构组件。让我们开始吧!

什么是Kafka?

Apache Kafka是一个用Scala和Java编程语言编写的开源软件平台。Kafka开始于2011年,是LinkedIn的一个消息传递系统,但后来发展成为一个流行的分布式事件流平台。该平台每天能够处理数万亿条记录

Kafka是一个分布式系统,由服务器和客户端组成,通过TCP网络协议进行通信。该系统允许我们读取、写入、存储和处理事件。我们可以把事件看成是一个独立的信息,需要从生产者转达给消费者。一些相关的例子包括亚马逊的支付交易、iPhone的位置更新、联邦快递的运输订单,等等。Kafka主要用于构建数据管道和实施流媒体解决方案。

Kafka允许我们建立的应用程序能够以非常高的速度不断准确地消费和处理多个流。它可以处理来自成千上万个不同数据源的流式数据。使用Kafka,我们可以:

  • 在记录发生时处理它们
  • 准确、一致地存储记录
  • 发布或订阅数据或事件流

Kafka发布-订阅消息系统在大数据领域非常流行,并与Apache Spark和Apache Storm很好地整合。

Kafka的使用案例

你可以在许多不同的方面使用Kafka,但这里是Kafka官方网站上分享的一些不同的使用案例:

  • 实时处理金融交易

  • 实时跟踪和监控运输车辆

  • 捕获和分析传感器数据

  • 收集和反应客户的互动情况

  • 监测医院病人

  • 为数据平台、事件驱动的架构和微服务提供基础

  • 执行大规模的信息传递

  • 充当分布式系统的提交日志

  • 还有更多

Kafka的主要特点

让我们来看看让Kafka如此受欢迎的一些关键特性:

  • 可扩展性:Kafka管理事件连接器、消费者、生产者和处理器的可扩展性。

  • 容错性:Kafka是容错的,可以轻松处理主站和数据库的故障。

  • 一致性:Kafka可以在许多不同的服务器上进行扩展,并且仍然保持你的数据的顺序。

  • 高性能:Kafka具有高吞吐量和低延时。即使在处理大量的数据时,它仍然保持稳定。

  • 可扩展性:许多不同的应用程序都与Kafka进行了整合。

  • 复制能力:Kafka使用摄入管道,可以轻松地复制事件。

  • 可用性:Kafka可以在可用性区域内扩展集群,或者连接不同地区的不同集群。Kafka使用ZooKeeper来管理集群。

  • 连接性:Kafka Connect接口允许你与许多不同的事件源集成,如JMS和AWS S3。

  • 社区:Kafka是Apache软件基金会中最活跃的项目之一。该社区举办的活动包括Confluent举办的Kafka峰会。

Kafka架构的组成部分

在我们深入了解Kafka架构的一些组成部分之前,让我们先看看一些关键的概念,这将有助于我们理解它。

Kafka消费者组

消费者组由一群相关的消费者组成,他们执行特定的任务,例如向服务发送消息。他们可以同时运行多个进程。Kafka从一个主题的分区中发送消息给组中的消费者。当消息被发送到组中时,每个分区都被大组中的一个消费者读取。

Kafka分区

Kafka主题被划分为分区。这些分区在不同的经纪商之间被复制。在每个分区内,多个消费者可以同时从一个主题中读取。

主题复制因子

主题复制因子确保数据保持可访问性,并确保部署顺利有效地运行。如果一个broker发生故障,不同broker上的topic replicas会留在这些broker内,以确保我们可以访问我们的数据。

Kafka主题

主题帮助我们组织我们的消息。我们可以把它们看作是我们的数据经过的通道。Kafka生产者可以向主题发布消息,而Kafka消费者可以从他们订阅的主题读取消息。

现在我们已经涵盖了一些基础性的概念,我们已经准备好进入架构组件了

Kafka APIs

Kafka在其架构中拥有四个基本的API。让我们来看看它们

Kafka Producer API

生产者API允许应用程序将记录流发布到Kafka主题。

Kafka消费者API

消费者API允许应用程序订阅Kafka主题。这个API还允许应用程序处理记录流。

Kafka连接器API

连接器API将应用程序或数据系统连接到主题。这个API帮助我们建立和管理生产者和消费者。它还使我们能够在不同的解决方案中重复使用连接。

Kafka Streams API

Streams API允许应用程序使用流处理来处理数据。这个API使应用程序能够从不同的主题接收输入流,并用流处理器来处理它们。然后,应用程序可以产生输出流并将它们发送到不同的主题。

Kafka经纪商

一台Kafka服务器被称为经纪人。通常情况下,多个经纪商作为一个Kafka集群运行。该集群由其中一个经纪商控制,称为控制器。控制器负责管理行动,如将分区分配给其他经纪商,并监控故障和停机时间。

分区可以被分配给多个经纪商。如果发生这种情况,该分区将被复制。这创造了冗余,以防其中一个经纪商失败。经纪人负责接收来自生产者的消息并将其提交到磁盘。经纪人也接收来自消费者的请求,并以来自分区的消息进行响应。

下面是一个经纪人托管几个主题分区的可视化图。

Kafka消费者

消费者接收来自Kafka主题的消息。他们订阅主题,然后接收生产者写到主题中的消息。通常情况下,每个消费者都属于一个消费者组。在一个消费者组中,多个消费者一起工作,从一个主题中读取消息。

让我们来看看消费者和分区在主题中的一些不同配置。

一个主题中的消费者和分区的数量相等

在这种情况下,每个消费者从一个分区读取信息。

一个主题中的分区数量大于一个组中的消费者数量

在这种情况下,一些或所有的消费者从一个以上的分区中读取。

单个消费者有多个分区

在这种情况下,所有的分区都被一个消费者所消耗。

一个主题中的分区数量少于一个组中的消费者数量

在这种情况下,一些消费者将是空闲的。

Kafka生产者

生产者向Kafka写消息,消费者可以阅读。

接下来要探索的高级概念

祝贺你迈出了使用Apache Kafka的第一步!Kafka是一个高效且强大的分布式系统。Kafka的扩展能力使其能够处理大型工作负载。相对于其他消息队列,它通常是实时数据管道的首选。总的来说,它是一个多功能的平台,可以支持许多用例。现在你已经准备好进入一些更高级的Kafka主题,比如:

  • 生产者序列化
  • 消费者配置
  • 分区分配

到最后,你会对如何用Apache Kafka构建可扩展的数据管道有一个更深刻的理解。

学习愉快!