Apache Kafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。

什么是Kafka?

事件流是相当于人体中枢神经系统的数字系统。它是“永远在线”世界的技术基础,在这个世界中,业务越来越多地由软件定义和自动化,软件的用户更多地是软件。

从技术上讲,事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的实践;持久地存储这些事件流以供以后检索;实时和回顾性地操作、处理和响应事件流;并根据需要将事件流路由到不同的目标技术。因此,事件流确保了数据的连续流和解释,从而使正确的信息在正确的时间出现在正确的位置。

什么是事件流?

事件流被应用到大量行业和组织中的各种用例中。它的许多例子包括:

实时处理支付和金融交易,如在证券交易所、银行和保险公司。
实时跟踪和监控汽车、卡车、车队和货物,例如在物流和汽车行业。
持续捕获和分析来自物联网设备或其他设备(如工厂和风力发电场)的传感器数据。
收集并立即响应客户交互和订单,例如在零售、酒店和旅游行业以及移动应用程序中。
监测病人在医院的护理和预测病情的变化,以确保在紧急情况下及时治疗。
连接、存储和提供由公司不同部门产生的数据。
作为数据平台、事件驱动架构和微服务的基础。

我可以使用事件流做什么?

Kafka结合了三个关键功能,因此您可以通过一个经过实战测试的解决方案实现端到端的事件流用例:

发布(写)和订阅(读)事件流,包括从其他系统连续导入/导出数据。
持久可靠地存储事件流,只要你想。
处理:当事件发生时或回顾性地处理事件流
所有这些功能都以分布式、高度可伸缩、弹性、容错和安全的方式提供。Kafka可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地和云中。你可以在自我管理Kafka环境和使用各种供应商提供的完全托管服务之间进行选择。

Apache Kafka®是一个事件流平台。这是什么意思?

Kafka是一个分布式系统,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以部署在本地和云环境中的裸机硬件、虚拟机和容器上。

服务器:Kafka作为一个或多个服务器的集群运行,可以跨越多个数据中心或云区域。其中一些服务器构成存储层,称为代理。其他服务器运行Kafka Connect,以事件流的形式持续导入和导出数据,将Kafka与现有系统(如关系数据库以及其他Kafka集群)集成。为了让你实现关键任务用例,Kafka集群具有高度可扩展性和容错性:如果其中任何一个服务器出现故障,其他服务器将接管它们的工作,以确保持续运行而不会丢失任何数据。

客户端:它们允许您编写分布式应用程序和微服务,这些应用程序和微服务可以并行地、大规模地、以容错的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。Kafka附带了一些这样的客户端,这些客户端是由Kafka社区提供的数十个客户端增强的:客户端可用于Java和Scala,包括更高级别的Kafka Streams库,用于Go, Python, C/ c++和许多其他编程语言以及REST api。

简而言之,kafka是如何工作的?

Kafka是一个分布式系统,由服务器和客户端组成,通过高性能TCP网络协议进行通信。它可以部署在本地和云环境中的裸机硬件、虚拟机和容器上。

服务器:Kafka作为一个或多个服务器的集群运行,可以跨越多个数据中心或云区域。其中一些服务器构成存储层,称为代理。其他服务器运行Kafka Connect,以事件流的形式持续导入和导出数据,将Kafka与现有系统(如关系数据库以及其他Kafka集群)集成。为了让你实现关键任务用例,Kafka集群具有高度可扩展性和容错性:如果其中任何一个服务器出现故障,其他服务器将接管它们的工作,以确保持续运行而不会丢失任何数据。

客户端:它们允许您编写分布式应用程序和微服务,这些应用程序和微服务可以并行地、大规模地、以容错的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也是如此。Kafka附带了一些这样的客户端,这些客户端是由Kafka社区提供的数十个客户端增强的:客户端可用于Java和Scala,包括更高级别的Kafka Streams库,用于Go, Python, C/ c++和许多其他编程语言以及REST api。

主要概念和术语

事件记录了世界上或你的业务中“发生了什么事”的事实。在文档中也称为记录或消息。当你向Kafka读写数据时,你是以事件的形式来完成的。从概念上讲,事件有键、值、时间戳和可选的元数据头。下面是一个例子:

事件密钥:“Alice”
事件值:“向Bob支付200美元”
事件时间戳:“2020年6月25日下午2:06”
生产者是那些向Kafka发布(写入)事件的客户端应用程序,消费者是那些订阅(读取和处理)这些事件的客户端应用程序。在Kafka中,生产者和消费者是完全解耦的,彼此不可知,这是实现Kafka所知的高可扩展性的关键设计元素。例如,生产者永远不需要等待消费者。Kafka提供了各种保证,比如只处理一次事件的能力。

事件被组织并持久地存储在主题中。非常简单地说,主题类似于文件系统中的一个文件夹,而事件就是该文件夹中的文件。例如,主题名称可以是“payments”。Kafka中的主题总是多生产者和多订阅者:一个主题可以有零、一个或多个生产者向其写入事件,也可以有零、一个或多个消费者订阅这些事件。主题中的事件可以根据需要随时读取——与传统的消息传递系统不同,事件在使用后不会被删除。相反,你可以通过每个主题的配置设置来定义Kafka应该保留多长时间的事件,之后旧的事件将被丢弃。Kafka的性能在数据大小方面是有效恒定的,所以长时间存储数据是完全没问题的。

主题是分区的,这意味着一个主题分布在位于不同Kafka代理上的许多“桶”上。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户机应用程序同时从多个代理读取和写入数据。当新事件发布到主题时,它实际上被附加到主题的一个分区中。具有相同事件键(例如,客户或车辆ID)的事件被写入相同的分区,并且Kafka保证给定主题分区的任何消费者总是以与写入相同的顺序读取该分区的事件。

作者:吴升斌  创建时间:2023-07-19 10:22
最后编辑:韓胜永  更新时间:2025-05-28 18:59