如今,数十亿数据源持续生成信息流,通常以事件——记录系统或环境中任何发生事件的基础数据结构的形式存在。
通常,事件是一个触发行为,可作为流程的组成部分驱动后续动作。客户下订单、选择航班座位或提交注册表等动作均为事件示例。事件不一定涉及人,例如,连接的恒温器在特定时间报告的温度也属于事件。
事件流为应用程序提供了即时响应新信息的机会。Apache Kafka 等流式数据平台允许开发人员构建实时数据消费、处理与响应系统,同时保持每个事件的顺序和可靠性。
Kafka 已发展为应用最广泛的事件流平台,能够每天采集和处理数万亿条记录且无显著性能迟滞,从而支撑可扩展数据量。超过 80% 的“财富 500”强组织均使用 Kafka 来营造数据驱动的实时客户体验,其中包括 Target、Microsoft、AirBnB 和 Netflix。
2011 年 LinkedIn 开发了 Apache Kafka,以满足公司对能够处理大量实时事件数据的高吞吐量、低延迟系统日益增长的需求。Kafka 使用 Java 和 Scala 构建,随后开放源代码并捐赠给 Apache 软件基金会。
虽然组织已支持或使用传统的消息队列系统(例如,AWS 的 Amazon SQS),但 Kafka 引入了一种完全不同的消息传递系统架构。
与在消费后删除消息的传统消息队列不同,Kafka 在可配置的期限内保留消息,从而支持多个使用者独立读取相同的数据。该功能使 Kafka 成为消息传递和事件溯源、流处理和构建实时数据管道的理想选择。
如今,Kafka 已成为实时事件流的事实标准。使用 Kafka 的行业包括金融、电子商务、电信和交通运输,而快速可靠地处理大量数据的能力对此类行业至关重要。
Kafka 是一个分布式平台;它以容错、高可用性聚类的形式运行,可以跨越多台服务器甚至多个数据中心。
Kafka 具有三项主要功能:
生产者(应用程序或主题)将记录写入名为“日志”的主题,并按记录发生的先后顺序进行存储。然后,主题被分为多个分区,并分布在 Kafka 代理程序(服务器)聚类中。
在每个分区内,Kafka 会维护记录的顺序,并在可配置的保留期内将其持久存储于磁盘上。虽然分区内的排序得以保证,但无法确保跨分区排序。根据应用程序的需求,消费者可以独立地实时读取这些分区或特定偏移量中的记录。
Kafka 通过分区复制确保可靠性。每个分区拥有一个主节点(位于某个代理程序上)及一个或多个位于其它代理程序上的从节点(副本)。这种复制机制可容忍节点故障,避免数据丢失。
从历史上看,Kafka 依赖于 Apache ZooKeeper——一种针对分布式代理程序的集中协调服务。ZooKeeper 可确保 Kafka 代理程序保持同步,即使某些代理程序出现故障。2011 年,Kafka 引入了 KRaft(Kafka Raft 协议)模式,通过将这些任务整合至 Kafka 代理程序本身,消除对 ZooKeeper 的需求。这一转变减少了外部依赖关系,简化了架构,并提高了 Kafka 聚类的容错性,使其更易于管理和扩展。
开发人员可以通过四个主要的应用程序编程接口 (API) 充分利用 Kafka 的功能:
生产者 API 使应用程序能够将流发布到 Kafka 主题。记录写入主题后,将无法更改或删除。相反,记录将保留在主题中,直至达到预设时间(如两天)或存储空间耗尽。
消费者 API 使应用程序能够订阅一个或多个主题,并采集和处理存储在主题中的数据流。它可以实时处理主题中的记录,也可以采集和处理过去的记录。
该 API 建立在生产者 API 和消费者 API 之上,并添加复杂的处理功能,使应用程序能够持续执行从前端到后端的处理。具体而言,流 API 涉及来自一个或多个主题的消费记录,可根据需要分析、聚合或转换这些记录,并将生成的流发布到相同主题或其他主题。
生产者 API 和消费者 API 可用于简单的流处理,而流 API 则支持开发更复杂的数据流和事件流应用程序。
该 API 允许开发人员构建作为可复用生产者或消费者的连接器,从而简化并自动整合数据源与 Kafka 聚类。
开发人员使用 Kafka 主要是为了创建两种应用程序:
专为在企业系统之间大规模实时移动数以百万计的数据或事件记录而设计的应用程序。此类应用程序必须可靠地移动数据,避免高速传输海量数据时出现损坏、数据重复或其他问题等常见风险。
例如,金融机构使用 Kafka,每秒可在支付网关、欺诈检测服务和会计系统之间流式传输数千笔交易,确保准确、实时且无重复或丢失的数据流。
由记录流或事件流驱动并自行生成流的应用程序。在数字驱动的世界中,我们每天都会接触这些应用程序。
其示例包括实时更新产品库存的电子商务网站或根据实时用户活动提供个性化内容与广告的平台。Kafka 通过将用户交互直接流式传输到分析和推荐引擎中来驱动这些体验。
Kafka 可与其他多种技术整合,这些技术都是 Apache 软件基金会 (ASF) 的组成部分。组织通常在大型事件驱动架构、流处理或大数据分析解决方案中使用此类技术。
其中部分技术为开源设计,而围绕 Kafka 构建的 Confluent 平台则提供企业级功能和托管服务,用于大规模实时数据处理。IBM、Amazon Web Services 等公司可提供基于 Kafka 的解决方案(如 IBM Event Streams、Amazon Kinesis),并与 Kafka 整合以实现可扩展的事件流。
Apache Kafka 生态系统包括:
Apache Spark 是一个用于大规模数据处理的分析引擎。您可以使用 Spark 对 Apache Kafka 提供的流执行分析,并创建实时流处理应用程序,例如点击流分析。
Apache NiFi 是一个配置可视化拖放界面的数据流管理系统。由于 NiFi 可以作为 Kafka 生产者和 Kafka 消费者运行,因此该工具非常适合管理 Kafka 无法解决的数据流挑战。
Apache Flink 是一种引擎,能以持续高速和低延迟执行大规模事件流计算。Flink 可以作为 Kafka 消费者采集流,基于流实时运行,并面向 Kafka 或其他应用程序发布结果。
Apache Hadoop 是一个分布式软件框架,可将大量数据存储在计算机聚类中,用于大数据分析、机器学习、数据挖掘和其他处理结构化和非结构化数据的数据驱动型应用程序。Kafka 通常用于创建指向 Hadoop 聚类的实时流数据管道。
Apache Camel 是一个整合框架,搭载基于规则的路由和中介引擎。它支持 Kafka 作为组件,可以轻松地与其他系统(如数据库、消息队列)进行数据整合,从而使 Kafka 成为大型事件驱动架构的组成部分。
Apache Cassandra 是一个高度可扩展的 NoSQL数据库,旨在处理多台商用服务器中的大量数据,而不会造成任何单点故障。
Kafka 通常用于将数据流式传输到 Cassandra,以进行实时数据摄取,并构建可扩展、容错的应用程序。
RabbitMQ 是一种热门开源消息代理程序,使应用程序、系统和服务能够通过转换消息协议进行通信。由于 Kafka 最初是作为消息代理程序(目前仍可如此使用),而 RabbitMQ 支持发布/订阅消息传递模型(以及其他模型),因此二者常被作为替代方案进行比较。不过,二者的用途不同,且旨在解决各类用例。例如,Kafka 主题可以有多个订阅者,但每条 RabbitMQ 消息只能有一个订阅者。此外,Kafka 主题具有持久性,而 RabbitMQ 消息一旦消费就会被删除。
在二者之间进行选择时,必须考虑应用程序的特定需求,例如吞吐量、消息持久性和延迟。Kafka 非常适合大规模事件流,而 RabbitMQ 则擅长应对需要灵活消息路由和低延迟处理的场景。
整合 Apache Kafka 和开源 AI 可以改变组织处理实时数据和人工智能的方式。与开源 AI 工具结合使用时,Kafka 可将预训练的 AI 模型应用于实时数据,从而实现实时决策和自动化。
开源 AI 使人工智能更易于访问,而 Kafka 则提供了实时处理数据所需的基础设施。这一设置消除了对批处理的需求,使企业能够在数据生成时立即采取相应的行动。
例如,电子商务公司可以使用 Kafka 在客户交互发生时对其进行流式传输,例如点击或产品视图。然后,预训练的 AI 模型会实时处理这些数据,并提供个性化建议或针对性优惠。Kafka 可管理数据流,而 AI 模型则根据传入数据进行调整,从而提高用户参与度。
通过将实时数据处理与 AI 模型相结合,组织可以在欺诈检测、预测性维护或动态定价方面更快地做出决策,从而构建响应更快、更高效的系统。
IBM® Event Streams 是基于开源 Apache Kafka 构建的事件流软件,采用两种形式:IBM® Cloud 上的完全托管服务或自托管。
借助 IBM 整合解决方案解锁业务潜力,连接不同的应用程序和系统以快速、安全地访问关键数据。
利用 IBM 的云咨询服务解锁新功能并促进业务敏捷性。