共计 4419 个字符,预计需要花费 12 分钟才能阅读完成。
Apache Kafka 教程 –Kafka 新手入门
Kafka Assistant 是一款 Kafka GUI 管理工具——治理 Broker,Topic,Group、查看生产详情、监控服务器状态、反对多种音讯格局。
[TOC]
摘要
明天,咱们开始了咱们的新旅程,这就是 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。
点对点消息传递零碎
在这里,音讯被保留在一个队列中。尽管,一个特定的音讯最多只能被一个消费者生产,即便一个或多个消费者能够订阅队列中的音讯。同时,它确保一旦消费者浏览了队列中的音讯,它就会从该队列中隐没。
公布 - 订阅音讯零碎
在这里,音讯被长久化在一个主题中。在这个零碎中,Kafka 消费者能够订阅一个或多个主题并生产该主题中的所有音讯。此外,音讯生产者是指发布者,音讯消费者是指订阅者。
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 Producer API
这个 Kafka Producer API 容许一个应用程序将音讯公布到一个或多个 Kafka 主题。
Kafka Consumer API
为了订阅一个或多个主题并解决应用程序中产生的音讯,咱们应用这个 Kafka Consumer API。
Kafka Streams API
为了充当流处理器,从一个或多个主题生产输出流,并向一个或多个输入主题产生输入流,同时无效地将输出流转化为输入流,这个 Kafka Streams API 给应用程序提供了便当。
Kafka Connector API
这个 Kafka 连接器 API 容许构建和运行可重用的生产者或消费者,将 Kafka 主题连贯到现有的应用程序或数据系统。例如,一个连贯到关系型数据库的连接器可能会捕捉一个表的每一个变动。
Kafka 组件
利用以下组件,Kafka 实现了信息传递。
Kafka 主题
基本上,音讯的汇合就是 Topic。此外,咱们还能够对 Topic 进行复制和划分。这里,复制指的是拷贝,划分指的是分区。另外,把它们设想成日志,Kafka 在其中存储音讯。然而,这种复制和划分主题的能力是实现 Kafka 的容错性和可扩展性的因素之一。
Kafka 生产者
它将音讯公布到一个 Kafka 主题。
Kafka 消费者
这个组件订阅一个(多个)主题,读取和解决来自该主题的音讯。
Kafka Broker
Kafka Broker 治理主题中的音讯存储。如果 Kafka 有一个以上的 Broker,这就是咱们所说的 Kafka 集群。
Kafka Zookeeper
为了给 Broker 提供对于零碎中运行的过程的元数据,并促成健康检查和 Broker 领导权的选举,Kafka 应用 Kafka zookeeper。
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 找到了很好的利用。它包含聚合来自分布式应用的统计数据,以产生集中式的经营数据反馈。
事件源
因为它反对十分大的存储日志数据,这意味着 Kafka 是一个优良的事件源利用的后端。
Kafka 教程 – Kafka 的比拟
许多应用程序提供了与 Kafka 雷同的性能,如 ActiveMQ、RabbitMQ、Apache Flume、Storm 和 Spark。那你为什么要抉择 Apache Kafka 而不是其余呢?
让咱们来看看上面的比拟。
Apache Kafka 和 Apache Flume 比照
工具的类型
Apache Kafka- 对于多个生产者和消费者来说,它是一个通用的工具。Apache Flum- 而对于特定的利用来说,它是一个非凡用处的工具。
复制性能
Apache Kafka- 应用摄入管道,它复制事件。Apache Flum- 它不复制事件。
RabbitMQ 和 Apache Kafka 比照
最重要的 Apache Kafka 替代品之一是 RabbitMQ。因而,让咱们看看它们之间有什么不同。
特点
Apache Kafka – 基本上,Kafka 是分布式的。同时,在保障耐久性和可用性的状况下,数据被共享和复制。RabbitMQ – 它对这些性能的反对绝对较少。
性能
Apache Kafka– 它的性能率很高,达到 100,000 条音讯 / 秒的水平。RabbitMQ – 而 RabbitMQ 的性能率约为 20,000 音讯 / 秒。
解决
Apache Kafka – 它容许牢靠的日志分布式解决。此外,Kafka 流中还内置了流解决语义。RabbitMQ – 在这里,消费者只是基于 FIFO,从 HEAD 中读取并逐个解决。
传统音讯队列零碎与 Apache Kafka 的比照
信息保留
传统的队列零碎 – 大多数队列零碎在音讯被解决后通常会从队列的末端删除。Apache Kafka – 在这里,音讯即便在被解决后也会继续存在。它们不会在消费者收到它们时被删除。
基于逻辑的解决
传统的队列零碎 – 它不容许基于相似音讯或事件的逻辑解决。Apache Kafka – 它容许依据相似的音讯或事件来解决逻辑。
所以,这就是对于 Apache Kafka 教程的全部内容。心愿你喜爱咱们的解释。
参考资料:
- Apache Kafka Tutorial — Kafka For Beginners