文章来源:https://kafka.cadn.net.cn
事件流是人体中枢神经系统的数字等价物。它是 为"永远在线"的世界奠定技术基础,在这个世界里,企业越来越多地使用软件定义 和 automated,而软件的用户更多的是 Software。
从技术上讲,事件流式处理是从事件源实时捕获数据的做法 如数据库、传感器、移动设备、云服务和流形式的软件应用程序 事件;持久存储这些事件流以供以后检索;操作、处理和反应 实时和回顾性地访问事件流;并将事件流路由到不同的 destination 技术。因此,事件流确保了 数据,以便在正确的时间、正确的地点提供正确的信息。
事件流适用于众多行业和组织的各种使用案例。它的许多示例包括:
- 实时处理付款和金融交易,例如在证券交易所、银行和保险中。
- 实时跟踪和监控汽车、卡车、车队和货物,例如物流和汽车行业。
- 持续捕获和分析来自 IoT 设备或其他设备(例如工厂和风电场)的传感器数据。
- 收集客户互动和订单并立即做出反应,例如在零售、酒店和旅游行业以及移动应用程序中。
- 监测住院护理的患者并预测病情变化,以确保在紧急情况下得到及时治疗。
- 连接、存储和提供公司不同部门生成的数据。
- 作为数据平台、事件驱动型架构和微服务的基础。
Apache Kafka® 是一个事件流式处理平台。那是什么意思?
Kafka 结合了三个关键功能,因此您可以使用单个久经考验的解决方案实现端到端事件流的使用案例:
- 发布 (写入)和订阅(读取)事件流,包括连续导入/导出 来自其他系统的数据。
- 根据需要持久可靠地存储事件流。
- 在事件发生时或回顾性地处理事件流。
所有这些功能都以分布式、高度可扩展、弹性、容错和 安全的方式。Kafka 可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地 以及在云中。您可以选择自行管理 Kafka 环境和使用完全托管式 由各种供应商提供的服务。
Kafka 是一个分布式系统,由服务器和客户端组成,这些服务器 和客户端 通过高性能 TCP 网络协议进行通信。 它可以部署在本地和云中的裸机硬件、虚拟机和容器上 环境。
服务器 :Kafka 作为一个或多个服务器的集群运行,这些服务器可以跨越多个数据中心 或云区域。其中一些服务器构成了存储层,称为代理。其他服务器运行 Kafka Connect 以持续导入和导出 数据作为事件流,以将 Kafka 与现有系统(如关系数据库)集成,以及 其他 Kafka 集群。为了让您实施任务关键型使用案例,Kafka 集群具有高度可扩展性 和容错:如果它的任何服务器出现故障,其他服务器将接管它们的工作以确保 连续运行,不会丢失任何数据。
客户端 :它们允许您编写分布式应用程序和微服务,这些应用程序和微服务可以读取、写入、 并行、大规模和以容错方式处理事件流,即使在网络的情况下也是如此 问题或机器故障。Kafka 附带了一些这样的客户端,这些客户端由 Kafka 提供的数十个客户端进行增强 社区:客户端可用于 Java 和 Scala,包括更高级别的 Kafka Streams 库、Go、Python、C/C++ 和 许多其他编程语言以及 REST API。
事件记录了世界上或您的企业中 "发生了什么" 的事实。在文档中也称为 record 或 message。当您向 Kafka 读取或写入数据时,您以事件的形式执行此操作。从概念上讲,事件具有键、值、时间戳和可选的元数据标头。下面是一个示例事件:
- 事件键:"Alice"
- 事件价值:"已向 Bob 支付 200 美元"
- 事件时间戳:"2020 年 6 月 25 日下午 2:06。
创建者 是将事件发布(写入)到 Kafka 的客户端应用程序,而使用者 是订阅(读取和处理)这些事件的客户端应用程序。在 Kafka 中,生产者和使用者完全解耦且彼此不可知,这是实现 Kafka 众所周知的高可扩展性的关键设计元素。例如,生产者永远不需要等待消费者。Kafka 提供各种保证,例如能够精确处理一次事件。
事件被组织并持久存储在主题中。非常简单,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。示例主题名称可以是 "payments"。Kafka 中的主题始终是多创建者和多订阅者:一个主题可以有零个、一个或多个向其写入事件的创建者,以及订阅这些事件的零个、一个或多个使用者。可以根据需要随时读取主题中的事件 - 与传统消息传递系统不同,事件在使用后不会删除。相反,您可以通过每个主题的配置设置定义 Kafka 应将事件保留多长时间,之后将丢弃旧事件。Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全可以的。
主题是分区 的,这意味着主题分布在位于不同 Kafka 代理上的多个"存储桶"中。这种分布式数据放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个代理读取和写入数据。当新事件发布到主题时,它实际上会附加到主题的某个分区中。具有相同事件键的事件(例如,客户或车辆 ID)将写入同一分区,Kafka 保证给定主题分区的任何使用者将始终以与写入事件完全相同的顺序读取该分区的事件。
图:此示例主题有四个分区 P1--P4。两个不同的生产者客户端正在发布 通过网络将事件写入主题的 分区。具有相同键的事件(由它们在图中的颜色表示)将写入相同的 分区。请注意,如果合适,两个 producer 都可以写入同一个分区。
为了使您的数据具有容错性和高可用性,每个主题都可以复制,甚至可以跨地理区域或数据中心复制,以便始终有多个代理拥有数据副本,以防万一出现问题,您想对代理进行维护,等等。常见的生产设置是复制因子 3,即数据始终有三个副本。此复制在 topic-partitions 级别执行。
这本引物应该足以作为介绍。如果您感兴趣,文档的 Design 部分详细介绍了 Kafka 的各种概念。
除了用于管理和管理任务的命令行工具外,Kafka 还有五个适用于 Java 和 Scala 的核心 API:
- 用于管理和检查主题、代理和其他 Kafka 对象的 Admin API。
- 生产者 API,用于将事件流发布(写入)到一个或多个 Kafka 主题。
- Consumer API,用于订阅(读取)一个或多个主题并处理向它们生成的事件流。
- Kafka Streams API,用于实施流处理应用程序和微服务。它提供更高级别的函数来处理事件流,包括转换、有状态操作(如聚合和联接)、窗口化、基于事件时间的处理等。从一个或多个主题中读取输入,以便生成对一个或多个主题的输出,从而有效地将输入流转换为输出流。
- Kafka Connect API,用于构建和运行可重用的数据导入/导出连接器,这些连接器使用(读取)或生成(写入)来自外部系统和应用程序的事件流,以便它们可以与 Kafka 集成。例如,指向关系数据库(如 PostgreSQL)的连接器可能会捕获对一组表的每次更改。但是,在实践中,您通常不需要实施自己的连接器,因为 Kafka 社区已经提供了数百个现成的连接器。
- 要获得 Kafka 的实践经验,请遵循快速入门。
- 要更详细地了解 Kafka,请阅读文档。 您还可以选择 Kafka 书籍和学术论文。
- 浏览用例,了解我们全球社区中的其他用户如何从 Kafka 中获得价值。
- 加入当地的 Kafka 聚会小组,观看 Kafka 社区的主要会议 Kafka 峰会的演讲。
文章来源:kafka -- 南京筱麦软件有限公司