什么是 Apache Kafka?

第一部分:数据集成挑战

典型的企业通过各种应用程序收集数据,例如会计、计费、客户关系管理网站等。这些应用程序中的每一个都有自己的数据输入和更新流程。为了获得业务的统一视图,工程师必须在这些不同的应用程序之间开发定制的集成。

这些直接积分可以得到如下所示的复杂解决方案。

 

每次整合都会遇到各种困难

  • 协议——数据如何传输(TCP、HTTP、REST、FTP、JDBC……)

  • 数据格式——数据如何解析(二进制、CSV、JSON、Avro……)

  • 数据模式与演变——数据如何形成以及可能如何变化

Apache Kafka 来救援

 使用 Apache Kafka 作为数据集成层,数据源将把数据发布到 Apache Kafka,目标系统将从 Apache Kafka 获取数据。这样可以将源数据流和目标系统分离,从而实现简化的数据集成解决方案,如下图所示。

 

Apache Kafka 中的数据流是什么?

数据流通常被认为是一种可能不受限制的数据序列。之所以使用流式传输这一名称,是因为我们关心的是数据一经生成即可立即访问。

组织中创建数据的每个应用程序都是潜在的数据流创建者。作为数据流的一部分创建的数据通常很小。数据流的数据吞吐量变化很大:一些流每秒会收到数万条记录,而一些流每小时会收到一两条记录。

Apache Kafka 用于存储这些数据流(也称为主题),然后允许系统执行流处理 - 对可能无穷无尽且不断变化的数据源执行持续计算的行为。一旦流被处理并存储在 Apache Kafka 中,它可能会传输到另一个系统,例如数据库。

 

数据流示例

以下是公司在现实世界中处理的一些数据流的示例

  • 日志分析。现代应用程序包括数万个微服务 - 所有这些微服务都会不断生成日志。这些日志中充满了可用于商业智能、故障预测和调试的信息。那么挑战就是如何在一个地方处理这些生成的大量日志数据。公司将日志数据推送到数据流中以执行流处理。

  • 网络分析。流数据的另一个常见用途是网络分析。现代网络应用程序测量其网站上的几乎所有用户活动,例如按钮点击、页面浏览量。这些操作加起来很快。流处理允许公司在数据生成时处理数据,而不是在数小时后处理。

为什么公司应该使用 Apache Kafka?

 一旦公司有实时数据流需求,就必须建立一个流平台。

Apache Kafka 是当今业界最受欢迎的数据流处理平台之一,超过 80% 的财富 100 强公司都在使用它。Kafka 在其仅附加的日志结构存储介质之上提供了一个简单的消息队列接口。它存储事件日志。数据分布到多个节点。Kafka 具有高度可扩展性和对节点丢失的容错能力。

Kafka 的部署规模从单个节点到数千个节点不等。除了 LinkedIn 之外,它还被 Netflix、Apple、Uber、Airbnb 等公司广泛用于生产工作负载。Kafka 的创建者离开 LinkedIn,成立了自己的公司 Confluent,全身心投入 Kafka 及其生态系统。Apache Kafka 现在是 Confluent 维护的一个开源项目。

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 应用程序。

 

 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2024-06-09 01:39  wongchaofan  阅读(17)  评论(0编辑  收藏  举报