Apache Kafka概述

1. 什么是Apache Kafka?

Apache Kafka是一个基于发布 – 订阅(publish-subscribe

)机制的容错消息系统,它以德国着名作家弗兰兹卡夫卡命名。 随着Linkedin的不断增长,他们需要实现一个容错冗余的方式来处理他们的连接系统和不断增长的数据池,所以Kafka由LinkedIn创造出来。然而,关于Apache Kafka的知识有很多,在本文中,我们将只涵盖Apache Kafka的所有基础知识。除此之外,我们还将涵盖Kafka使用案例,Kafka架构以及为什么我们需要Kafka(即使已经有其他相同功能的应用框架)。

2. Apache Kafka简介

当涉及到使用基于消息的主题(topic)实现生产者Producer)和消费者之(Consumer间的沟通时,我们使用Apache Kafka。Apache Kafka是一种快速,可扩展,容错的发布-订阅消息传递系统。基本上,它设计了一个高端的新一代分布式应用平台,另外,它支持大量的永久或临时消费者。Kafka最好的特性之一就是它具有高度的可用性并且能够适应节点故障并支持自动恢复,这个功能使Apache Kafka成为实际数据系统中大规模数据系统组件之间通信和集成的理想选择。

此外,该技术取代了传统的消息代理如JSM,AMQP等到,它能够提供更高的吞吐量,可靠性和可复制性。Kafka提供一个Kafka代理(broker),一个Kafka生产者(producer)和一个Kafka消费者(consumer)。 Kafka代理是Kafka集群上的一个节点,其用途是持久化和复制数据,Kafka Producer将消息发送到名为Kafka主题(Topic)的消息容器中,而Kafka消费者则从Kafka主题中收取消息。

消息系统

当我们将数据从一个应用程序传输到另一个应用程序时,我们使用消息系统(Messaging System)。好处是,应用程序可以只关注数据本身而不用担心如何共享数据。分布式消息传递是基于可靠消息队列的概念上的,即使消息在客户端应用程序和消息系统之间实行的是异步排队。 有两种类型的消息传递模式可用,即点对点(point-to-point)和发布 – 订阅(pub-sub)消息系统,大多数消息传递都遵循pub-sub模式。

pic

点对点消息系统

消息持久存储在队列中。一个特定的消息最多只能由一个消费者(Consumer)读取,即使一个或多个消费者可以使用队列中的消息。此外,它确保消费者一旦在队列中读取了一条消息,该消息就会从该队列中消失。

发布-订阅消息系统

消息持久存在于主题(topic)中。在此系统中,消费者可以订阅一个或多个主题并读取该主题中的所有消息。此外,消息生产者就是发布者,消息消费者称为订阅者。

3. Apache Kafka的历史

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

虽然当时已经有可用于批处理的技术,但这些技术的部署详细信息已与下游用户共享,因此,即是这些技术涉及实时处理,但他们处理LinkedIn的问题仍旧不够合适。 2011年,卡夫卡被公之于众。

4. 我们为什么要使用Apache Kafka 集群Cluster)??

众所周知,大数据中存在大量数据, 并且在涉及大数据的处理时,存在两个主要挑战,一种是收集大量数据,另一种是分析收集的数据。因此,为了克服这些挑战,我们需要一个消息传递系统,然后Apache Kafka证明了它的实用性。

Apache Kafka有许多好处,例如:

  • 通过存储/发送事件来跟踪Web活动以进行实时处理。
  • 提醒并报告运营指标。
  • 将数据转换为标准格式。
  • 持续处理流数据并发送到主题。

因此,Kafka的广泛使用对一些最流行的应用程序(如ActiveMQ,RabbitMQ,AWS等)导致了激烈的竞争。

5.?Apache Kafka的受众

希望使用Apache Kafka消息传递系统在大数据分析领域开展事业的专业人士应该参考这篇Kafka Tutorial文章,它将使完全了解Apache Kafka。

6.?学习Kafka的先决条件?

在继续使用此Apache Kafka教程之前,必须对Java,Scala,分布式消息传递系统和Linux环境有一个很好的理解。

7. Kafka架构

Apache Kafka有四个核心API:

pic

  • Kafka Producer API

Kafka Producer API允许应用程序将记录流发布到一个或多个Kafka主题

  • Kafka Consumer API

要订阅一个或多个主题并处理在应用程序中生成的记录流,我们使用此Kafka Consumer API。

  • Kafka Streams API

Kafka Streams API给予应用程序许可,让应用程序作为流处理器,消耗来自一个或多个主题的输入流并产生输出流到一个或多个输出主题并且还有效地将输入流转换为输出流。

  • Kafka Connector API

? ? ? ? Kafka Connector API允许构建和运行将Kafka主题(Topic)连接到现有应用程序或数据系统的可重用生产者(producer)或消费者(consumer)。 例如,连接数据库的connector可以捕获对表的每个更改。

8. Kafka组件

Kafka使用以下组件实现消息传递:

  • Kafka 主题(Topic)

? ? ? ? Kafka利用主题(Topic)在其系统中存储和组织消息,而且,我们可以对主题进行复制(replicate)和分区(partition)。 这种复制和分区主题的能力是实现Kafka容错和可扩展性的因素之一。

pic

  • Kafka 生产者(Producer)

? ? ? ? 将消息发送到Kafka主题。

  • Kafka消费者(Consumer)

? ? ? ? 订阅一个或多个主题,读取并处理来自主题的消息

  • Kafka 代理(Broker)

? ? ? ? 管理消息在主题中的存储,如果Kafka有超过一个代理,我们称它们为Kafka集群。

  • ?Kafka Zookeeper?

? ? ? ? Kafka使用Kafka zookeeper向代理提供有关系统中运行的流程的元数据,并进行健康检查和代理领导选举(leadership election)。

9. 日志剖析

? ? ? 我们将日志视为分区,数据源将消息写入日志。 这样有一个优点是,一个或多个消费者在任何时候都能从他们选择的日志中读取消息。下图显示了数据源正在写入日志,并且消费者正在以不同的偏移量读取日志。

pic

10. 数据日志

在Kafka中,消息可以保留相当长的时间,消费者可以方便的阅读这些消息。但是,如果Kafka配置为将消息保留24小时且消费者停机的时间超过24小时,那么消费者将无法读取消息。 如果消费者的停机时间仅为60分钟,则可以从最后已知的偏移量继续读取消息。 Kafka不保留消费者从主题中读取消息的状态。

11. Kafka分区

每个Kafka代理都有几个分区,每个分区可以是主题的领导者(Leader)或副本(replica)。在使用新数据更新副本时,领导者负责管理主题的所有写入和读取。如果领导者以某种方式失败,副本将成为新的领导者。

pic

12. Kafka用例

  • 消息(Messaging

? ? ? ? 对于更传统的消息代理,Kafka可以作为替代品并做的更好。我们可以说Kafka具有更好的吞吐量,内置分区,复制和容错功能,这使其成为大规模消息处理应用程序的理想解决方案。

  • ?指标(Metrics

? ? ? ? ?对于运营监控数据,可以用Kafka开发出良好的应用程序,包括汇总分布式应用程序的统计信息,以生成运营数据的集中式提要。

  • ?事件溯源(Event Sourcing

? ? ? ? ?由于Kafka支持非常大的存储日志数据,所以它是事件溯源应用程序的优秀后端。

13. 与其他工具比较

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

a). Apache Kafka vs Apache Flume

i. 工具类型

Apache Kafka – 对于多个生产者和消费者来说,它是一种通用工具。

Apache Flume – 用于特定应用的专用工具。

ii. 复制功能

Apache Kafka – 使用摄取管道复制事件。

Apache Flume – 不会复制事件。

b). Apache Kafka vs RabbitMQ

最重要的Apache Kafka替代品之一是RabbitMQ。那么,让我们看看它们之间的差异:

i. 功能

Apache Kafka – Kafka是分布式的,凭借有保证的耐用性和可用性,数据可以分片和复制。

RabbitMQ – 它对这些功能的支持相对较少。

ii. 性能

Apache Kafka – 它的性能高达100,000条/秒。

RabbitMQ – 性能约为20,000条/秒。

iii. 处理

Apache Kafka – 允许可靠的日志分布式处理,另外,Kafka Streams内置了流处理语义。

RabbitMQ – 消费者基于FIFO(先进先出)机制,从HEAD挨个读取并处理。

c). Apache Kafka vs 传统队列系统?

i. 消息保留

Apache Kafka – 消息即使在处理后仍然存在。即使消费者收到消息后,消息不会被移除。

传统队列系统 – 大多数队列系统通常在消息被处理后就从队列末尾删除这个消息。

ii. 基于逻辑的处理

Apache Kafka – 允许基于相似消息或事件处理逻辑。

传统队列系统 – 不允许基于相似消息或事件处理逻辑。

Apache Kafka概述

发表评论

邮箱地址不会被公开。 必填项已用*标注

八十 二 − = 七十 五

滚动到顶部