Apache Kafka教程–Kafka新手入门

原文地址:Apache Kafka Tutorial — Kafka For Beginners

Kafka Assistant 是一款 Kafka GUI 管理工具——管理Broker,Topic,Group、查看消费详情、监控服务器状态、支持多种消息格式。

摘要

今天,我们开始了我们的新旅程,这就是Apache Kafka教程。在这个Kafka教程中,我们将看到什么是Kafka,Apache Kafka的历史,为什么是Kafka。此外,我们还将学习Kafka架构、Kafka的组件和Kafka分区。此外,我们还将讨论Kafka的各种比较和Kafka的使用案例。除此之外,我们将在这个Kafka教程中看到各种术语,如Kafka Broker、Kafka Cluster、Kafka Consumer、Kafka Topics等。

那么,让我们开始学习Apache Kafka教程吧。

什么是Kafka?

当涉及到使用基于消息的主题实现生产者和消费者之间的通信时,我们使用Apache Kafka。Apache Kafka是一个快速、可扩展、容错、发布-订阅的消息传递系统。基本上,它为高端的新一代分布式应用设计了一个平台。同时,它允许大量的永久性或临时性的消费者。Kafka的一个最好的特点是,它具有高度的可用性和对节点故障的弹性,并支持自动恢复。这个特点使得Apache Kafka成为现实世界数据系统中大规模数据系统组件之间的理想通信和集成工具。

此外,这项技术取代了传统的消息 Broker,能够像JMS、AMQP等一样给出更高的吞吐量、可靠性和复制。此外,Kafka提供了一个Kafka Broker、一个Kafka Producer和一个Kafka Consumer。Kafka Broker是Kafka集群上的一个节点,它的作用是坚持和复制数据。Kafka生产者将消息推送到称为Kafka Topic的消息容器中。而Kafka消费者则从Kafka Topic中提取消息。

在继续学习Kafka教程之前,让我们先了解一下Kafka中Messaging System这一术语的实际含义。

Kafka中的消息传递系统

当我们将数据从一个应用程序转移到另一个应用程序时,我们使用了消息传递系统。它的结果是,不用担心如何分享数据,应用程序可以只关注数据。分布式消息传递是建立在可靠的消息队列上。虽然,消息在客户端应用程序和消息传递系统之间是异步排队的。有两种类型的消息传递模式,即点对点和发布-订阅(pub-sub)消息传递系统。然而,大多数的消息传递模式都遵循pub-sub。

Apache Kafka的历史

此前,LinkedIn面临着的问题是,将网站上的大量数据低延迟地输入到一个能够处理实时事件的lambda架构中。作为一个解决方案,Apache Kafka在2010年被开发出来,因为之前没有一个解决方案可以处理这个问题。

然而,有一些技术可用于批处理,但这些技术的部署细节是与下游用户共享的。因此,当涉及到实时处理时,这些技术并不适合。然后,在2011年,Kafka被开源了。

为什么我们要使用Apache Kafka集群?

我们都知道,大数据中存在着巨大的数据量。而且,当涉及到大数据时,有两个主要挑战。一个是收集大量的数据,而另一个是分析收集到的数据。因此,为了克服这些挑战,我们需要一个消息传递系统。那么Apache Kafka已经证明了它的效用。Apache Kafka有许多好处,例如:

因此,由于其广泛的使用,这项技术正在给一些最流行的应用程序,如ActiveMQ、RabbitMQ、AWS等带来激烈的竞争。

Kafka教程 - 先决条件

在继续学习Apache Kafka教程之前,你必须对Java和Linux环境有良好的了解。

Kafka架构

下面我们将在这个Apache Kafka教程中讨论四个核心API。

Kafka组件

利用以下组件,Kafka实现了信息传递。

Kafka教程–日志剖析

在这个Kafka教程中,我们将日志视为分区。基本上,一个数据源会向日志写消息。其中一个好处是,在任何时候,一个或多个消费者从他们选择的日志中读取。在这里,下图显示了数据源正在写日志,而消费者在不同的偏移点上正在读取日志。

Kafka教程 - 数据日志

通过Kafka,消息被保留了相当长的时间。而且,消费者可以根据自己的方便来阅读。然而,如果Kafka被配置为保留消息24小时,而消费者的停机时间超过24小时,消费者就会丢失消息。而且,如果消费者的停机时间只有60分钟,那么可以从最后的已知偏移量读取消息。Kafka并不保留消费者从一个主题中读取的状态。

消费者会向一个叫作 __consumer_offset 的主题发送 消息,消息里包含每个分区的偏移量。如果消费者一直处于运行状态,那么偏移量就没有 什么实际作用。但是,如果消费者发生崩溃或有新的消费者加入群组,则会触发再均衡。 再均衡完成之后,每个消费者可能会被分配新的分区,而不是之前读取的那个。为了能够 继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的 位置继续读取消息。

Kafka教程 - Kafka的分区

每个Kafka Broker中都有几个分区。此外,每个分区可以是一个领导者,也可以是一个主题的副本。此外,随着新数据对副本的更新,领导者负责对一个主题的所有写和读。如果领导者以某种方式失败了,副本就会作为新的领导者接管。

Java在Apache Kafka中的重要性

Apache Kafka是用纯Java编写的,Kafka的本地API也是java。然而,许多其他语言如C++、Python、.Net、Go等也支持Kafka。不过,一个不需要使用第三方库的平台还是Java。另外,我们可以说,用Java以外的语言写代码,会有一点开销。

此外,如果我们需要Kafka上标准的高处理率,我们可以使用Java语言。同时,Java为Kafka消费者客户端提供了良好的社区支持。因此,用Java实现Kafka是一个正确的选择。

Kafka使用案例

有几个Kafka的使用案例,显示了我们为什么实际使用Apache Kafka。

Kafka教程 - Kafka的比较

许多应用程序提供了与Kafka相同的功能,如ActiveMQ、RabbitMQ、Apache Flume、Storm和Spark。那你为什么要选择Apache Kafka而不是其他呢?

让我们来看看下面的比较。

Apache Kafka 和 Apache Flume 对比

RabbitMQ 和 Apache Kafka 对比

最重要的Apache Kafka替代品之一是RabbitMQ。因此,让我们看看它们之间有什么不同。

传统消息队列系统与Apache Kafka的对比

所以,这就是关于Apache Kafka教程的全部内容。希望你喜欢我们的解释。


参考资料: