Apache Kafka 简明教程

Apache Kafka - Introduction

大数据中使用大量数据。关于数据,我们有两个主要挑战。第一个挑战是如何收集大量数据,第二个挑战是如何分析收集到的数据。为了应对这些挑战,你肯定需要一个消息传递系统。

Kafka 是专为分布式高吞吐量系统而设计的。Kafka 作为更传统的消息代理的替代品往往能很好地工作。与其他消息传递系统相比,Kafka 具有更好的吞吐量、内置分区、复制和固有的容错性,这使其非常适合大规模消息处理应用程序。

What is a Messaging System?

消息传递系统负责在应用程序之间传输数据,因此应用程序可以专注于数据,而不用担心如何共享数据。分布式消息传递基于可靠消息排队的概念。消息在客户端应用程序和消息传递系统之间异步排队。有两种消息传递模式可用 - 一种是点对点,另一种是发布订阅 (pub-sub) 消息传递系统。大多数消息传递模式遵循 pub-sub

Point to Point Messaging System

在点对点系统中,消息保存在队列中。一个或多个消费者可以消费队列中的消息,但特定消息只能被最多一个消费者消费。一旦消费者读取了队列中的消息,它就会从该队列中消失。此系统的典型示例是订单处理系统,其中每个订单将由一个订单处理程序处理,但多个订单处理程序也可以同时工作。下图描绘了结构。

point to point messaging system

Publish-Subscribe Messaging System

在发布订阅系统中,消息保存在主题中。与点对点系统不同,消费者可以订阅一个或多个主题并消费该主题中的所有消息。在发布订阅系统中,消息生产者称为发布者,消息消费者称为订阅者。一个现实生活中的例子是 Dish TV,它发布不同的频道,如体育、电影、音乐等,任何人都可以订阅他们自己的一组频道,并在他们订阅的频道可用时获取它们。

publish subscribe messaging system

What is Kafka?

Apache Kafka 是一个分布式发布订阅消息传递系统,也是一个可以处理大量数据的健壮队列,它使你可以将消息从一个端点传递到另一个端点。Kafka 适用于离线和在线消息消费。Kafka 消息保存在磁盘上并在集群内复制以防止数据丢失。Kafka 构建在 ZooKeeper 同步服务的基础之上。它与 Apache Storm 和 Spark 集成得很好,可用于实时流数据分析。

Benefits

以下是 Kafka 的一些优点 −

  1. Reliability - Kafka 是分布式的、分区的、复制的和容错的。

  2. Scalability - Kafka 消息传递系统无需停机即可轻松扩展。

  3. Durability - Kafka 使用分布式提交日志,这意味着消息会尽可能快地保存在磁盘上,因此它具有持久性。

  4. Performance - Kafka 对发布和订阅消息都具有很高的吞吐量。即使存储了大量 TB 的消息,它也能保持稳定的性能。

Kafka 非常快,并且保证零停机时间和零数据丢失。

Use Cases

Kafka 可以用于许多用例。其中一些如下所示 −

  1. Metrics - Kafka 通常用于运营监控数据。这涉及汇总分布式应用程序的统计信息以生成运营数据的集中馈送。

  2. Log Aggregation Solution - Kafka 可以跨整个组织使用,收集来自多个服务的日志,并以标准格式向多个消费者提供它们。

  3. Stream Processing - Storm 和 Spark Streaming 等流行框架从主题中读取数据,对其进行处理,并将处理后的数据写入新主题,供用户和应用程序使用。Kafka 的强大持久性在流处理的情况下也非常有用。

Need for Kafka

Apache Kafka 是一个用于处理所有实时数据馈送的统一平台。Kafka 支持低延迟的消息传递,并且在发生机器故障时可保证故障容错。它能够处理大量不同的消费者。Kafka 非常快,每秒可执行 200 万次写入。Kafka 将所有数据保存到磁盘,这意味着实际上所有写入都进入操作系统的页面缓存(RAM)。这使得将数据从页面缓存传输到网络套接字非常高效。