主页 topics 什么是 Apache Kafka? Apache Kafka
了解 Apache Kafka - 网络上部分最流行事件驱动型实时用户体验(包括 AirBnB、Netflix 和 Pinterest)背后的开源流式技术。
抽象的黑色和蓝色图像
什么是 Apache Kafka?

Apache Kafka (Kafka) 是一个开源的分布式流媒体平台,它支持开发事件驱动型实时应用。 这意味着什么?

目前,数十亿数据源都在不断生成数据记录流,包括事件流。 事件是一种数字记录,用于记录所发生的操作及其发生时间。 通常,事件是一个操作,用于驱动流程中的另一个操作。 客户下订单、选择航班座位或提交注册表,这些都是事件的例子。 事件不一定涉及到人员。例如,联网的恒温器在给定时间报告温度也是一个事件。

这些流为需要实时响应数据或事件的应用创造了机会。 流媒体平台使开发人员能够构建应用,以极快的速度持续使用和处理这些流,并基于正确的发生顺序实现高保真度和准确性。

LinkedIn 于 2011 年开发了 Kafka 作为内部使用的高吞吐量消息代理,随后又将 Kafka 开源并免费提供给 Apache 软件基金会(链接位于 ibm.com 外部)。 目前,Kafka 已经发展成为使用最广泛的流媒体平台,每天能够采集和处理数万亿条记录,并且不会随数据量的增加而出现任何明显的性能滞后情况。 Target、Microsoft、AirBnB 和 Netflix 等财富 500 强企业都依靠 Kafka 为其客户提供数据驱动型实时体验。

以下视频提供了有关 Kafka 的更多信息 (9:10):

Kafka 的工作原理

Kafka 主要具有三大功能:

  1. 它能够让应用发布或预订数据或事件流。
  2. 它能够以可容错的持久方式准确地存储记录(即,按照记录的出现顺序)。
  3. 它能够实时处理记录(一出现便处理)。

开发人员可以通过四个 API 来利用这些 Kafka 功能:

  • 生产者 API:这使应用能够将流发布到 Kafka 主题。 主题是一个已命名的日志,它按照记录的相对出现顺序来存储记录。 将记录写入主题后,就不能更改或删除该记录;它会根据预先配置情况在主题中保留一段时间(如两天),或者直到存储空间用完。
  • 使用者 API:这使应用能够预订一个或多个主题,并采集和处理主题中存储的流。 它可以实时处理主题中的记录,也可以采集和处理过去的记录。
  • 流 API:它基于生产者和使用者 API,并增加了复杂的处理功能,使应用能够执行从前端到后端的持续流处理。具体来说,它会根据需要使用一个或多个主题中的记录来分析、聚合或转换这些记录,并将结果流发布到相同的主题或其他主题。 虽然生产者和使用者 API 可用于简单的流处理,但流 API 支持开发更复杂的数据和事件流应用。
  • 连接器 API:这让开发人员可以构建连接器,这些连接器是可复用的生产者或使用者,可简化将数据源集成到 Kafka 集群中的过程并实现自动化。 查看一些用于常用数据存储的现成连接器(链接位于 ibm.com 外部)。 
Kafka 性能

Kafka 是一个分布式平台,它以一个具有容错能力且高度可用的集群形式运行,可以跨越多个服务器,甚至是多个数据中心。 Kafka 主题可进行分区和复制以实现扩展,在不影响性能的情况下为大量并发使用者提供服务。 因此,根据 Apache.org 的说法:“无论服务器上具有 50 KB 还是 50 TB 的持久存储容量,Kafka 都会执行相同的操作。”

Kafka 用例

Kafka 主要用于创建两种应用:

  • 实时流数据管道:这种应用专用于在企业系统之间大规模、实时且可靠地移动数以百万计的数据或事件记录,而不会出现在高速移动如此庞大数据量时通常会遇到的中断、数据重复和其他问题。
  • 实时流应用:这种应用由记录或事件流驱动,并且会生成自己的流。 只要您上网,每天都会遇到大量这样的应用,从不断更新本地商店产品数量的零售网站,到根据点击流分析显示个性化推荐或广告的网站,都属于这一范畴。
Kafka 与 RabbitMQ

RabbitMQ 是一种非常流行的开源消息代理,它还是一种中间件,通过在应用、系统和服务之间转换消息传递协议,使它们能够相互通信。

因为 Kafka 最初是一种消息代理(理论上,它仍可用作消息代理),且 RabbitMQ 支持发布/预订消息传递模型(及其他模型),所以 Kafka 和 RabbitMQ 经常会被作为彼此的替代项而拿来相互比较。 但是,这些比较并没有实际意义,当在它们两者之间进行选择时,通常需要仔细考虑一些技术细节。 例如,Kafka 主题可以有多个订户,而每个 RabbitMQ 消息只能有一个订户;Kafka 主题是持久的,而 RabbitMQ 消息一旦使用就会被删除。

关键是:

  • Kafka 是一个流处理平台,支持应用以快速且持久的方式发布、使用和处理大量记录流;
  • RabbitMQ 是一种消息代理,它让使用不同消息传递协议的应用能够相互传输消息。
经常与 Kafka 一起使用的 Apache 技术

Kafka 经常与其他几种 Apache 技术一起用于更大的流处理、事件驱动型架构或大数据分析解决方案。

Apache Spark

Apache Spark 是一种用于大规模数据处理的分析引擎。 您可以使用 Spark 对 Apache Kafka 提供的流执行分析,并生成实时流处理应用,例如前面提到的点击流分析。

Apache NiFi

Apache NiFi 是一个数据流管理系统,具有可视化的拖放式界面。 由于 NiFi 可以作为 Kafka 生产者和 Kafka 使用者运行,因此它是管理 Kafka 无法解决的数据流挑战的理想工具。

Apache Flink

Apache Flink 是一个用于大规模对事件流执行计算的引擎,始终具有高速度和低延迟的特点。 Flink 可以作为 Kafka 使用者来采集流,基于这些流实时执行操作,并将结果发布到 Kafka 或其他应用。

Apache Hadoop

Apache Hadoop 是一种分布式软件框架,支持将大量数据存储在计算机集群中,以用于大数据分析、机器学习、数据挖掘,以及其他处理结构化数据和非结构化数据的数据驱动型应用。 Kafka 通常用于创建通往 Hadoop 集群的实时流数据管道。

相关解决方案
应用现代化服务

信心十足地在任何云中安全地构建和管理应用并使之现代化

探索应用现代化咨询服务
AI 支持的自动化

从业务工作流程到 IT 运营,我们为您提供了 AI 支持的自动化。

探索 AI 支持的自动化
IBM Cloud Pak for Integration

将应用、服务和数据连接到市场上最全面的集成平台 IBM Cloud Pak for Integration。

探索 IBM Cloud Pak for Integration
采取下一步行动

随着对客户体验的要求越来越高以及对业务和 IT 运营产生影响的应用越来越多,Kafka 仍将是应用现代化的一部分。 提高自动化程度对于满足这些需求也很有帮助。 通过与 IBM 合作,您可以访问 AI 驱动的自动化功能,包括预先构建的工作流程,帮助您通过提高每个流程的智能化水平加速实现创新。 了解 IBM Event Streams for IBM Cloud,这是一个完全托管的 Kafka 即服务事件流平台,支持您在 IBM Cloud 中构建事件驱动型应用。

了解有关 IBM Event Streams 的更多信息