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