以下内容是从官网搬过来的一些Kafka相关的基础知识点:
什么事件流
从技术上讲,事件流是从事件源(如数据库、传感器、移动设备、云服务和软件应用程序)以事件流的形式实时捕获数据的实践;持久存储这些事件流以供以后索引;实时回顾性地操作、处理和响应事件流;并根据需要将事件流路由到不同的目标技术。因此,事件流确保了数据的连续流动和解释,以便正确的信息在正确的时间出现正确的位置。
为什么说Kafka是一个事件流平台
Kafka结合了三个关键功能,
- 发布(写入)和订阅(读取)事件流,包括从其他系统持续导入/导出数据
- 根据需要持久可靠地存储事件流
- 在事件发生时或回顾性地处理事件流
这些功能都是以分布式、高度可扩展、弹性‘容错和安全的方式提供。Kafka可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地和云端,你可以在自行管理Kafka环境和使用各种供应商提供的完全托管服务之间进行选择
Kafka是如何工作的
Kafka是一个分布式事件流系统,由通过高性能TCP网络协议进行通信的服务和客户端组成,可以让您跨多台机器读取、写入、存储和处理事件。它可以部署在本地和云环境中的裸机硬件、虚拟机和容器上
服务器:Kafka作为一个或多个服务器的集群运行,可以跨越多个数据中心或云区域。其中一些服务器形成存储层,称为代理。其他服务器运行Kafka Connect以将数据作为事件流持续导入和导出,以将Kafka与您现有的系统(如关系数据库以及其他Kafka集群)集成。Kafka集群具有高度可扩展性和容错性;如果其中任何一个服务器出现故障,其他服务器将接管它们的工作,以确保持续运行而不会丢失任何数据。
客户端:他们允许您编写分布式应用程序和微服务,以并行、大规模和容错方式读取、写入和处理事件流,即使在网络问题或及其故障的情况下也是如此。
主要概念、术语的描述
事件:记录了世界或您的业务中“发生了某事”的事实。也称为记录或消息。当您向Kafka读取或写入数据时,您以事件的形式执行此操作。事件具有键、值、时间戳、可选的元数据标头。
生产者:向Kafka发布(写入)事件的客户端应用程序
消费者:订阅(读取和处理)这些事件的那些客户端应用程序。
在Kafka中,生产者和消费者完全解耦并且彼此不可知。
主题:事件被组织并持久地存储在主题中。主题类似于文件系统中的文件夹,事件是该文件夹中的文件。Kafka中的主题始终是多生产者和多订阅者,主题中的时间可以根据需要随时读取,事件在被消费之后不会被删除。可以通过每个主题的配置设置来定义Kafka应该将您的事件保留多长时间,之后旧事件将被丢弃。
Kafka的性能在数据大小方面实际上是恒定的,因此长时间存储数据是非常好的
主题是分区的,意味着一个主题分布在位于不同Kafka代理上的多个桶中。数据的这种分布式放置对于可伸缩性非常重要,因为它允许客户端应用程序同时从多个代理读取和写入数据。当一个新事件发布到一个主题时,它实际上是附加到主题的分区之一。具有相同事件键(例如,客户或车辆ID)的事件被写入同一个分区,并且Kafka保证给定主题分区的任何消费者始终与写入事件完全相同的顺序读取该分区的事件。
图:此示例主题有四个分区P1—P4。两个不同的生产者客户端通过网络将事件写入主题的分区,彼此独立地向主题发布新事件。具有相同键的事件被写入同一个分区。请注意,如果合适的话,两个生产者都可以写入同一个分区。
如果想要让数据具有容错性和高可用性,可以复制每个主题,甚至跨地理区域或数据中心,以便始终有多个代理拥有数据副本,以防万一。通常其复制因子为3,即始终存在三个数据副本。此复制在主题分区级别执行
Kafka提供了高级别的函数来处理事件流:包括转换、聚合、连接等有状态操作、窗口化、基于事件时间的处理等等。从一个或多个主题读取输入以生成一个或多个主题的输出,有效地将输入流转换为输出流。
连接器:用于构建和运行可重用的数据导入/导出连接器,这些连接器从外部系统和应用程序消耗(读取)或生成(写入)事件流,以便它们可以与Kafka集成。
Kafka的使用场景:消息传递、网站活动跟踪、做监控指标、日志聚合、流处理、事件溯源、提交日志等等
消息传递:Kafka可以很好地替换更传统的消息代理。消息代理的使用有多种原因(将处理和数据生产者分离,缓冲未处理的消息等)。与大部分消息传递系统相比,Kafka具有更好的吞吐量、内置的分区、复制和容错能力,这使其成为大规模消息处理应用程序的良好解决方案。消息传递的使用通常吞吐量相对较低,但可能需要较低的端到端延迟,并且通常依赖于Kafka提供的强大的持久性保证。
网站活动跟踪:Kafka 的原始用例是能够将用户活动跟踪管道重建为一组实时发布-订阅源。这意味着网站活动(页面查看、搜索或用户可能采取的其他操作)将发布到中心主题,每种活动类型都有一个主题。这些订阅源可用于订阅一系列用例,包括实时处理、实时监控以及加载到 Hadoop 或离线数据仓库系统以进行离线处理和报告。活动跟踪的数量通常非常高,因为每个用户页面查看都会生成许多活动消息。
指标:Kafka常用语运营监控数据。这涉及聚合来自分布式应用程序的统计数据以生成操作数据的集中提要
日志聚合:日志聚合通常从服务器收集物理日志文件,并将它们放在一个中心位置(可能是文件服务器或者HFDS)进行处理。Kafka抽象出文件的细节,并将日志或事件数据更清晰地抽象为消息流。这允许更低延迟的处理和更容易支持多个数据源和分布式数据消费。与Scribe或Flume等以日志为中心的系统相比,Kafka提供同样出色的性能、由于复制而产生的更强大的持久性保证以及更低的端到端延迟
流处理:许多Kafka用户在由多个阶段组成的处理管道中处理数据,其中原始输入数据从Kafka主题中消费,然后聚合、丰富或以其他方式转换为新主题以供进一步消费或后续处理【消费、去重】。
事件溯源:是一种应用程序设计风格,其中状态更改被记录为按时间排序的记录序列。Kafka对非常大的存储日志数据的支持使其成为以这种风格构建的应用程序的出色后端。
提交日志:Kafka可以作为分布式系统的一种外部提交日志。该日志有助于在节点之间复制数据,并充当故障节点恢复其数据的重新同步机制。