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