Apache Kafka 历史

Kafka 是 LinkedIn 为满足传统消息队列系统无法满足的内部流处理需求而创建的。其第一个版本于 2011 年 1 月发布。Kafka 迅速流行起来,从那时起就成为 Apache 基金会最受欢迎的项目之一。

该项目目前主要由 Confluent 维护,并得到 IBM、Yelp、Netflix 等其他公司的帮助。

Apache Kafka 的用例有哪些?

Apache Kafka 的用例很多。其中包括针对不同业务应用程序的流处理。Apache Kafka 构成了一些著名流处理框架的存储机制,例如 Apache Flink、Samza。

消息传递系统

活动追踪

从许多不同位置收集指标,例如物联网设备

应用程序日志分析

解耦系统依赖关系

与 Spark、Flink、Storm、Hadoop 等大数据技术集成。

事件源商店

Apache Kafka 哪些地方不太适合?

Apache Kafka 非常适合上面概述的用例,但在某些情况下,使用 Apache Kafka 是不可能或不推荐的:

为移动应用程序或物联网代理数百万个客户端:Kafka 协议不是为此而设计的,但存在一些代理来弥补这一差距。

带有索引的数据库: Kafka 是一个事件流日志,没有内置的分析能力,也没有复杂的查询模型。

物联网的嵌入式实时技术:在嵌入式系统上执行这些用例有更低级别和更轻量的替代方案。

工作队列: Kafka 由主题而非队列组成(与 RabbitMQ、ActiveMQ 和 SQS 不同)。队列旨在扩展到数百万个消费者,并在处理后删除消息。在 Kafka 中,数据在处理后不会被删除,并且消费者无法扩展到主题中的分区数量之外。

Kafka 作为区块链:Kafka 主题呈现出区块链的一些特征,其中数据附加在日志中,并且 Kafka 主题可以是不可变的,但缺少区块链的一些关键属性,例如数据的加密验证以及完整的历史记录保存。

Kafka 在业界的具体应用情况如何?

Apache Kafka 在业界被广泛使用。下面重点介绍一些用例。

Uber在其实时定价管道中广泛使用 Kafka。Kafka 是将大量事件传达给不同流处理计算的骨干。Kafka 的速度和灵活性使 Uber 能够根据现实世界中不断变化的事件(可用司机数量及其位置、用户及其位置、天气事件、其他事件)调整其定价模型,并向用户收取适当的费用以管理供需。

Netflix已将 Kafka 集成为其数据平台的核心组件。他们在内部将其称为 Keystone 数据管道。作为 Netflix Keystone 的一部分,Kafka 每天处理数十亿个事件。为了说明 Kafka 可以处理的海量数据,Netflix 每天向 Kafka 发送约 5000 亿个事件和 1.3 PB 的数据。

许多人都不知道,Kafka 是我们每天享受的许多服务的核心,这些服务来自一些世界上最大的科技公司,例如 Uber、Netflix、Airbnb、LinkedIn、Apple 和 Walmart。

第 2 部分:Apache Kafka 核心概念的定义

现在我们已经从高层次了解了 Apache Kafka,让我们深入了解如何使用该工具。在本部分中,我们将介绍 Kafka 主题、生产者和消费者的基础知识。

什么是 Kafka 主题?

Kafka 主题组织相关事件。例如,我们可能有一个名为日志的主题,其中包含来自应用程序的日志。主题大致类似于 SQL 表。但是,与 SQL 表不同,Kafka 主题不可查询。相反,我们必须创建 Kafka 生产者和消费者来利用数据。主题中的数据以二进制格式存储在键值形式中。

什么是 Kafka 生产者?

在 Kafka 中创建主题后,下一步就是将数据发送到主题。将数据发送到主题的应用程序称为 Kafka 生产者。向 Kafka 生产事件的方法有很多,但应用程序通常会与 Java、Python、Go 等语言的 Kafka 客户端库以及许多其他语言集成。

请注意,Kafka 生产者部署在 Kafka 外部,仅通过将数据直接发送到 Kafka 主题来与 Apache Kafka 交互。

什么是 Kafka 消费者?

一旦创建了主题并将数据生成到主题中,我们就可以使用数据流的应用程序了。从一个或多个 Kafka 主题中提取事件数据的应用程序称为 Kafka 消费者。有很多方法可以从 Kafka 消费事件,但应用程序通常与 Java、Python、Go 等语言的 Kafka 客户端库以及许多其他语言集成。默认情况下,消费者仅消费消费者首次连接到主题后生成的数据。

请注意,Kafka 消费者部署在 Kafka 外部,仅通过直接从 Kafka 主题读取数据与 Apache Kafka 交互。

第 3 部分:Kafka 生态系统

多年来,人们为 Kafka 开发了许多其他工具和库来扩展其功能。在本节中,我们将介绍更广泛的 Kafka 生态系统中一些最受欢迎的部分。

什么是 Kafka Streams?

一旦我们将来自外部系统的数据导入 Kafka,我们可能希望使用流处理应用程序来处理这些数据。流处理应用程序利用 Apache Kafka 等流数据存储来提供实时分析。

例如,假设我们有一个名为的 Kafka 主题,twitter_tweets它是 Twitter 上所有推文的数据流。从这个主题中,我们可能想要:

仅过滤有超过 100 个10赞或回复的推文,以捕获重要的推文

1计算每分钟每个主题标签收到的推文数量

结合两者即可实时获取热门话题和主题标签!

为了在 Apache Kafka 中执行主题级转换,我们可以使用专门针对此用例的流库,而不必编写非常复杂的生产者和消费者代码。

在这种情况下,我们可以利用 Kafka Streams 库,这是一个与 Apache Kafka 一起发布的流处理框架。您可能听说过 Kafka Streams 的替代方案是 Apache Spark 或 Apache Flink。

什么是 Kafka Connect?

为了将数据导入 Apache Kafka,我们发现需要利用 Kafka 生产者。随着时间的推移,我们注意到许多公司共享相同的数据源类型(数据库、系统等),因此编写开源标准化代码可能对更大的利益有帮助。同样的想法也适用于 Kafka 消费者。

Kafka Connect 是一款允许我们将流行系统与 Kafka 集成的工具。它允许我们重复使用现有组件将数据导入 Kafka 并将数据从 Kafka 导出到其他数据存储。

流行的 Kafka 连接器示例包括:

Kafka Connect 源连接器(生产者):数据库(通过 Debezium 连接器)、JDBC、Couchbase、GoldenGate、SAP HANA、区块链、Cassandra、DynamoDB、FTP、IOT、MongoDB、MQTT、RethinkDB、Salesforce、Solr、SQS、Twitter 等……

Kafka Connect Sink 连接器(消费者): S3、ElasticSearch、HDFS、JDBC、SAP HANA、DocumentDB、Cassandra、DynamoDB、HBase、MongoDB、Redis、Solr、Splunk、Twitter

什么是 Schema Registry?

Schema Registry 可帮助在 Apache Kafka 中注册数据模式,并确保生产者和消费者在发展过程中相互兼容。它支持 Apache Avro、Protobuf 和 JSON 模式数据格式。

如果没有模式注册表,当数据模式发生变化时,生产者和消费者就面临中断的风险。

什么是 Conduktor?

Conduktor 平台是用于 Kafka 开发的完整端到端解决方案,涵盖 Kafka 管理、测试、监控、数据质量和数据治理。它允许开发人员与整个 Kafka 生态系统进行交互,例如 Broker、Topics、Consumers、Producers、Kafka Connect 和 Confluent Schema Registry。

什么是 ksqlDB?

ksqlDB 是一个流处理数据库,它提供类似 SQL 的接口来转换 Kafka 主题并对流数据执行类似数据库的常见操作,例如连接、聚合、过滤和其他形式的数据操作。

在后台,ksqlDB web 服务器将 SQL 命令转换成一系列 Kafka Streams 应用程序。